Android中补间动画相关知识

1.Android中补间动画的分类

在Android中,补间动画一共分为4类,分别是:

  • 灰度动画:AlphaAnimation
  • 平移动画:TranslateAnimation
  • 缩放动画:ScaleAnimation
  • 旋转动画:RotateAnimation

2.四大补间动画父类及其常用方法

Android中的四个补间动画都来自于共同的动画类Animation。这里我们说一下Animation的常用方法。

  • setFillAfter:设置是否维持结束画面。true表示动画结束后停留在结束画面,false表示动画结束后恢复到开始画面。
  • setRepeatMode:设置重复模式。Animation.RESTART表示从头开始,Animation.REVERSE表示倒过来开始。默认为Animation.RESTART。
  • setRepeatCount:设置重播次数。默认为0表示只播放一次。
  • setDuration:设置动画的持续时间。单位毫秒。
  • setInterpolator:设置动画的插值器。
  • setAnimationListener:设置动画事件的监听器。需实现接口AnimationListener的3个方法。
onAnimationStart在动画开始时触发
onAnimationEnd在动画结束时触发
onAnimationRepeat在动画重播时触发

3.补间动画对宿主视图的要求

补间动画的宿主视图可以是任意视图,只要派生自View类就行。

4.宿主视图开启关闭补间动画

调用宿主对象的startAnimation方法即可命令宿主视图开始动画,调用宿主对象的clearAnimation方法即可要求宿主视图清除动画。

5.补间动画初始化方式对比

  • 初始化灰度动画:在构造函数中指定视图透明度的前后数值。取值为0.0~1.0,0表示完全不透明,1表示完全透明。
  • 初始化平移动画:在构造函数中指定视图左上角在平移前后的坐标值。其中,第一个参数为平移前的横坐标,第二个参数为平移后的横坐标,第三个参数为平移前的纵坐标,第四个参数为平移后的纵坐标。
  • 初始化缩放动画:在构造函数中指定视图横纵坐标的前后缩放比例。缩放比例取值0.5表示缩小到原来的二分之一,取值2表示放大到原来的两倍。其中,第一个参数为缩放前的横坐标比例,第二个参数为缩放后的横坐标比例,第三个参数为缩放前的纵坐标比例,第四个参数为缩放后的纵坐标比例。
  • 初始化旋转动画:在构造函数中指定视图的旋转角度。其中,第一个参数为旋转前的角度,第二个参数为旋转后的角度,第三个参数为圆心的横坐标类型,第四个参数为圆心横坐标的数值比例,第五个参数为圆心的纵坐标类型,第六个参数为圆心纵坐标的数值比例。坐标类型的取值说明如下表
Animation类的坐标类型说明
ABSOLUTE绝对位置
RELATIVE_TO_SELF相对自身位置
RELATIVE_TO_PARENT相对上级位置

6.四种补间动画代码示例

灰度动画示例

public class MainActivity extends AppCompatActivity{

    private View view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = findViewById(R.id.view);
        //创建一个灰度动画
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f,0.1f);
        alphaAnimation.setDuration(3000);
        alphaAnimation.setFillAfter(true);
        view.startAnimation(alphaAnimation);
        alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f,1.0f);
                alphaAnimation.setDuration(3000);
                alphaAnimation.setFillAfter(true);
                view.startAnimation(alphaAnimation);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    }
}

平移动画示例

public class MainActivity extends AppCompatActivity{

    private View view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = findViewById(R.id.view);
        //创建一个平移动画
        TranslateAnimation translateAnimation = new TranslateAnimation(1.0f,-100,1.0f,1.0f);
        translateAnimation.setDuration(3000);
        translateAnimation.setFillAfter(true);
        view.startAnimation(translateAnimation);
        translateAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                TranslateAnimation translateAnimation = new TranslateAnimation(-100,1.0f,1.0f,1.0f);
                translateAnimation.setDuration(3000);
                translateAnimation.setFillAfter(true);
                view.startAnimation(translateAnimation);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    }
}

缩放动画示例

public class MainActivity extends AppCompatActivity{

    private View view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = findViewById(R.id.view);
        //创建一个缩放动画
        ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f,1.0f,1.0f,0.5f);
        scaleAnimation.setDuration(3000);
        scaleAnimation.setFillAfter(true);
        view.startAnimation(scaleAnimation);
        scaleAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f,1.0f,0.5f,1.0f);
                scaleAnimation.setDuration(3000);
                scaleAnimation.setFillAfter(true);
                view.startAnimation(scaleAnimation);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    }
}

旋转动画示例

public class MainActivity extends AppCompatActivity{

    private View view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = findViewById(R.id.view);
        //创建一个旋转动画
        RotateAnimation rotateAnimation = new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        rotateAnimation.setDuration(3000);
        rotateAnimation.setFillAfter(true);
        view.startAnimation(rotateAnimation);
        rotateAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                RotateAnimation rotateAnimation = new RotateAnimation(0f,-360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
                rotateAnimation.setDuration(3000);
                rotateAnimation.setFillAfter(true);
                view.startAnimation(rotateAnimation);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中的补间动画是一种基于属性动画动画效果,它可以让视图在一段时间内平滑地从一种状态过渡到另一种状态。补间动画的实现方式比较简单,使用起来也比较灵活,可以用于实现各种动画效果。 补间动画可以对视图的位置、大小、透明度等属性进行动画效果的设置,常见的补间动画包括: 1. 透明度动画(AlphaAnimation):可以控制视图的透明度,让视图在一段时间内逐渐变得透明或不透明。 2. 位移动画(TranslateAnimation):可以控制视图在屏幕上的位置,让视图在一段时间内沿着指定的路径平移。 3. 缩放动画(ScaleAnimation):可以控制视图的大小,让视图在一段时间内逐渐变大或变小。 4. 旋转动画(RotateAnimation):可以控制视图的旋转角度,让视图在一段时间内沿着指定的轴线旋转。 使用补间动画需要先创建相应的动画对象,然后将动画对象与需要执行动画的视图进行绑定,最后启动动画。可以使用XML文件或代码来创建补间动画,下面是一个简单的代码示例: ```java // 创建透明度动画对象 AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f); // 设置动画持续时间 alphaAnimation.setDuration(1000); // 设置动画重复次数 alphaAnimation.setRepeatCount(Animation.INFINITE); // 设置动画模式 alphaAnimation.setRepeatMode(Animation.REVERSE); // 将动画对象与视图进行绑定 view.startAnimation(alphaAnimation); ``` 在这个示例中,我们创建了一个透明度动画对象,设置了动画持续时间为1000毫秒,重复次数为无限次,模式为反转模式,然后将动画对象与视图进行绑定,最后启动动画。这样就可以让视图在一段时间内逐渐变得透明或不透明,并且重复执行动画效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值