Android开发-动画 补间动画(Tween Animation)(一)

130 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

上一篇简单介绍了下补间动画的5种动画类别,针对不同类别实现的效果不一样,根据业务的需求选择相应的实现,下面我们介绍第一种AlphaAnimation,也就是透明度的动画效果。

AlphaAnimation实现

透明度动画的实现方式可以分为2种: 1、xml+Java 首先在res/anim下面新建一个anim_alpha.xml:

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
      android:duration="2000"
      android:fillAfter="true"
      android:fillBefore="false"
      android:fromAlpha="1.0"
      android:repeatCount="-1"
      android:repeatMode="restart"
      android:startOffset="3000"
      android:toAlpha="0.5"/>

xml里的几个属性,字面意思都可以理解,介绍几个不常用的属性: fillAfter:动画结束之后是否保持动画的最终状态;true,表示保持动画的最终状态 fillBefore:动画结束之后是否保持动画开始前的状态;true,表示恢复到动画开始前的状态

接下来就是在Java代码中去执行xml,实现动画的播放。

public class MainActivity extends Activity{
private AlphaAnimation alphaAnimation;
private ImageView alphaImage;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        alphaImage = findViewById(R.id.image_alpha);
        alphaAnimation = (AlphaAnimation) (AlphaAnimation)AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_alpha);
        alphaImage.startAnimation(alphaAnimation);
    }
}

主要代码就是以上部分,开始了动画,动画就会在规定的时间里执行相应的参数设置,当然我们也可以完全通过Java代码来实现。

对应于xml的参数AlphaAnimation也有相应的方法,初始化的时候可以设置,AlphaAnimation有2个构造函数,AlphaAnimation(float,float)和AlphaAnimation(Context,Attribute),上面的方法里用到的就是第二个,第一个构造的传参值对应的就是xml里面的fromAlpha和toAlpha,对应的取值范围一样,是0.0f~1.0f,0.0f表示完全透明, 1.0f表示和原来一样。

setDuration():设置动画的持续时长;
setFillAfter():设置动画结束之后的状态是否是动画的最终状态,true,表示是保持动画结束时的最终状态;
setFillBefore():设置动画结束之后的状态是否是动画开始时的状态,true,表示是保持动画开始时的状态;
setRepeatMode():设置动画的重复模式:反转REVERSE和重新开始RESTART;
setRepeatCount():设置动画播放次数;
通过使用view的startAnimation方法就可以执行动画了。具体代码如下:

public void startAlphaAnimation(){
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.5f);
        alphaAnimation.setDuration(3000);
        alphaAnimation.setFillAfter(true);
        alphaAnimation.setFillBefore(true);
        alphaAnimation.setRepeatMode(AlphaAnimation.REVERSE);
        alphaAnimation.setRepeatCount(AlphaAnimation.INFINITE);
        mIvImg.startAnimation(alphaAnimation);
   }

如果想取消动画的执行,可以调用cancel()方法,也可以调用View的clearAnimation()方法。

使用起来是不是很简单,快来试试吧