android ——动画

一、帧动画:

第一步:drawable中添加要做帧动画的图片,并新建一个frame.xml文件

java 复制代码
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">

<!--    添加图片和显示的时间-->
    <item android:drawable="@drawable/img1" android:duration="220"/>
    <item android:drawable="@drawable/img2" android:duration="220"/>
    <item android:drawable="@drawable/img3" android:duration="220"/>
</animation-list>

第二步:MainActivity的xml文件中引用 frame :

java 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/frame"
    android:id="@+id/ctl"
    tools:context=".MainActivity">
</androidx.constraintlayout.widget.ConstraintLayout>

第三步:点击启动和停止动画

java 复制代码
    private boolean flag=true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ConstraintLayout mCtl = findViewById(R.id.ctl);
        AnimationDrawable animation= (AnimationDrawable) mCtl.getBackground();
        mCtl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                启动动画
                if (flag){
                    animation.start();  //启动动画
                    flag=false;
                }else {
                    animation.stop(); 
                    flag=true;
                }

            }
        });
    }

二、补间动画:

第一、alpha 透明度

1、res中新见一个alpha.xml文件

java 复制代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--
 fromAlpha:0 完全透明
 toAlpha:1  完全不透明
 duration: 显示周期
 -->
    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="2000"
        />
</set>

2、activity的xml文件中添加ImageView

java 复制代码
    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img1"
        android:adjustViewBounds="true"
        android:maxWidth="500dp"
        android:maxHeight="500dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        />

3、activity中使用:

java 复制代码
      ImageView img=findViewById(R.id.image);
        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                通过加载xml动画设置文件,来创建一个Animation对象
               Animation animation=AnimationUtils.loadAnimation(TweenAnimActivity.this,R.anim.alpha);
                img.startAnimation(animation);
            }
        });

第二、rotate 旋转

1、res中新建一个rotate.xml文件:

java 复制代码
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--
fromDegrees:开始的位置
toDegrees:旋转多少度
pivotX:旋转的中心点
pivotY:
-->
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000"
        />
</set>

2、activity中使用:

java 复制代码
  ImageView img=findViewById(R.id.image);
        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                通过加载xml动画设置文件,来创建一个Animation对象
               Animation animation=AnimationUtils.loadAnimation(TweenAnimActivity.this,R.anim.rotate);
                img.startAnimation(animation);
            }
        });

第三、scale 缩放

1、res中新建scale,xml文件:

java 复制代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--    
fromXScale:x的原始大小
fromYScale:Y的原始大小
pivotY:缩放到的y的大小
pivotX:缩放到的x的大小
toXScale:缩放的中心点
toYScale:
duration:动画执行的周期时间
-->
    <scale android:fromXScale="1"
           android:fromYScale="1"
           android:pivotY="0.5"
           android:pivotX="0.5"
           android:toXScale="50%"
           android:toYScale="50%"
           android:duration="2000"/>
</set>

2、activity中使用:

java 复制代码
      ImageView img=findViewById(R.id.image);
        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                通过加载xml动画设置文件,来创建一个Animation对象
               Animation animation=AnimationUtils.loadAnimation(TweenAnimActivity.this,R.anim.scale);
                img.startAnimation(animation);
            }
        });

第四、translate 平移

1、在res中新建translate.xml文件

java 复制代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate android:fromXDelta="0"
               android:fromYDelta="0"
               android:toXDelta="200"
               android:toYDelta="200"
               android:duration="2000"/>
</set>

2、在activity中使用

java 复制代码
     ImageView img=findViewById(R.id.image);
        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                通过加载xml动画设置文件,来创建一个Animation对象
               Animation animation=AnimationUtils.loadAnimation(TweenAnimActivity.this,R.anim.translate);
                img.startAnimation(animation);
            }
        });

三、属性动画:

1第一、ValueAnimator:

java 复制代码
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tween_anim);
        
        ValueAnimator animator=ValueAnimator.ofFloat(0f,1f);
        animator.setDuration(2000);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(@NonNull ValueAnimator animation) {
                Object value = animation.getAnimatedValue();
                Log.d(TAG, "onAnimationUpdate: "+value);
            }
        });
        animator.start();
    }

第二、ObjectAnimator:给某个空间设置动画就家那个控件

java 复制代码
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tween_anim);
        TextView textView=findViewById(R.id.tv);
//        第二个参数只要是textview中有set的属性都可以设置
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView, "alpha", 0f,1f);
        objectAnimator.setDuration(2000);
        objectAnimator.start();
    }

第三、监听器:

1、全部监听,重写所有

java 复制代码
        objectAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(@NonNull Animator animation) {
//                开始调用
            }

            @Override
            public void onAnimationEnd(@NonNull Animator animation) {
//               结束调用
            }

            @Override
            public void onAnimationCancel(@NonNull Animator animation) {
//                取消调用
            }

            @Override
            public void onAnimationRepeat(@NonNull Animator animation) {
//                重复执行调用
            }
        });

2、使用哪个监听,重写哪个

java 复制代码
     objectAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationStart(Animator animation) {
                super.onAnimationStart(animation);
            }
        });
相关推荐
百锦再1 小时前
Android Studio开发 SharedPreferences 详解
android·ide·android studio
青春给了狗1 小时前
Android 14 修改侧滑手势动画效果
android
CYRUS STUDIO1 小时前
Android APP 热修复原理
android·app·frida·hotfix·热修复
火柴就是我2 小时前
首次使用Android Studio时,http proxy,gradle问题解决
android
limingade2 小时前
手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段
android·智能手机·电脑·蓝牙电话·电脑打电话
浩浩测试一下3 小时前
计算机网络中的DHCP是什么呀? 详情解答
android·网络·计算机网络·安全·web安全·网络安全·安全架构
青春给了狗4 小时前
Android 14 系统统一修改app启动时图标大小和圆角
android
pengyu5 小时前
【Flutter 状态管理 - 柒】 | InheritedWidget:藏在组件树里的"魔法"✨
android·flutter·dart
居然是阿宋6 小时前
Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系
android·开发语言·kotlin
凉、介6 小时前
PCI 总线学习笔记(五)
android·linux·笔记·学习·pcie·pci