这一篇,学会Android全部动画

本文详细介绍了Android的三种动画类型:帧动画、补间动画和属性动画。帧动画适用于复杂的个性化动画效果,补间动画用于视图的标准动画效果,如平移、旋转、缩放和透明度。属性动画则作用于任意对象,能实现更自定义的动画效果。文章还提供了具体的实现代码和示例。
摘要由CSDN通过智能技术生成

Android三种动画

三方:https://blog.csdn.net/zuo_er_lyf/article/details/79716840

Android动画分三类:帧动画(frame animation),补间动画(tween animation),属性动画(property animation)

一、帧动画(frame animation)

1、作用对象:视图控件(view)

1.如Android的TextView、Button等等
2.不可作用于View组件的属性,如:颜色、背景、长度等等

2、原理

  • 将动画拆分成帧的形式,每一帧对应一张图片
  • 本质就是:按顺序播放一组预先定义好的图片

3、具体使用

步骤①:将序列图片放到drawable中
步骤②:设置启动动画:Java和xml
方式一:XML实现

  • step1 在res/drawable中创建动画效果.XML文件
  • step2 设置动画资源
    music_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@drawable/sound_00030"
        android:duration="100" />
    <item
        android:drawable="@drawable/sound_00031"
        android:duration="100" />

</animation-list>
  • step3 在Java代码中 载入&启动
public class MainActivity extends AppCompatActivity {
   

    private AnimationDrawable animationDrawable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ImageView imageview = (ImageView) findViewById(R.id.imageview);
        Button btn_start = (Button) findViewById(R.id.btn_start);
        Button btn_stop = (Button) findViewById(R.id.btn_stop);

        //开启动画
        btn_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //设置动画
                imageview.setImageResource(R.drawable.music_anim);
                //获取动画对象
                animationDrawable = (AnimationDrawable) imageview.getDrawable();
                //开启动画
                animationDrawable.start();
            }
        });

        //停止动画
        btn_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                animationDrawable.stop();
            }
        });
    }
}

方式2:在Java代码中实现

 animationDrawable = new AnimationDrawable();
        for (int i = 30; i <= 59; i++) {
            int id = getResources().getIdentifier("sound" + i, "drawable", getPackageName());
            Drawable drawable = getResources().getDrawable(id);
            animationDrawable.addFrame(drawable, 1);
        }
        // <--开始动画-- >
        btn_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                animationDrawable.setOneShot(false);
                imageview.setImageDrawable(animationDrawable);
                // 获取资源对象
                animationDrawable.stop(); // 特别注意:在动画start()之前要先stop(),不然在第一次动画之后会停在最后一帧,这样动画就只会触发一次
                animationDrawable.start(); // 启动动画 } });
            }
        });
        // <-- 停止动画 -->
        btn_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                animationDrawable.stop();
            }
        });

4、特点

  • 优点:使用简单、方便
  • 缺点: 容易引起 OOM,因为会使用大量 & 尺寸较大的图片资源

使用时一定注意避免使用大图片,否则会引起OOM

5、应用场景

  • 较为复杂的个性化动画效果。

二、补间动画

1、作用对象

  • 视图 (view)

1.如Android的TextView、Button等等
2.不可作用于View组件的属性,如:颜色、背景、长度等等

2、原理

  • 通过确定开始视图样式&结束视图样式、中间动画变化过程由系统补全来确定一个动画

动效样式有:translation、alpha、scale、rotate

涉及到四个类:TranslateAnimation、AlphaAnimation、RotateAnimation、ScaleAnimation

3、具体使用

  • 补间动画使用方式分两种:Java代码&xml中实现

前者优点:动画描述的可读性更好
后者优点:动画效果可动态创建

3.1 平移动画(translate)
方式一:xml中实现

  • step1:在res/anim中创建动效.xml文件
  • step2:设置平移动画的参数
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:startOffset="1000"
    android:fillAfter="false"
    android:fillBefore="true"
    android:fillEnabled="true"
    android:repeatCount="0"
    android:repeatMode="restart"

    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="500"
    android:toYDelta="500" />
  • step3 在Java代码中创建animation对象&播放动画
Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate_animation);
btn_start.startAnimation(animation);

方式二:Java代码中实现

TranslateAnimation translateAnimation = new TranslateAnimation(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值