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

260 阅读2分钟

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

前面介绍补间动画的第二种动画形式:ScaleAnimation,实现方式也是有2种,可以借助xml也可以完全使用java来实现,下面介绍第三种动画效果的实现:TranslateAnimation,也就是位移动画。

TranslateAnimation 的实现

TranslateAnimation动画效果主要是控制View的位置,来展示View的效果。

它有三个构造方法,分别是:

public TranslateAnimation(Context context,AttributeSet attrs);

public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta);

public TranslateAnimation (int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue);

第一种构造在前面2种动画效果中也都有体现,第二种构造是我们最常用的,所以我们主要介绍第二种的构造实现。 先来看下它的xml实现,先创建一个xml,translate_anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000">
    <translate
        android:fromXDelta = "0%p"
        android:toXDelta = "0%p"
        android:fromYDelta="0%p"
        android:toYDelta="80%p"/>
</set>

4个参数的定义类似于前面2个动画效果,x轴的位移和y轴的位移,参数的值也是可以定义三种类型,百分比,像素,和百分比p,上面的值用的是百分比p,意思是竖直方向位移80%的位置。

同样的添加下Activity里面的代码,执行动画,就可以看到位置的动画效果了。

public class MainActivity extends Activity{
private TranslateAnimation translateAnimation;
private ImageView translateImage;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        translateImage = findViewById(R.id.image_translate);
        translateAnimation = (TranslateAnimation) (TranslateAnimation)AnimationUtils.loadAnimation(MainActivity.this, R.anim.translate_anim);
        translateImage.startAnimation(translateAnimation);
    }
}

纯java代码实现:

TranslateAnimation translateAnimation1 = new TranslateAnimation(0,100,0,300);
translateAnimation1.setDuration(2000);
translateImage.startAnimation(translateAnimation1)

从第三个构造方法里可以看到,它也有绝对位置和相对位置的参考值,位移的类型同样也是分为3种:Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF和 Animation.RELATIVE_TO_PARENT,具体的字段意义在前面的ScaleAnimation已经介绍了,这里不再赘述,实际的效果还是需要通过自己写代码来实现,才能更深入的了解,比如Animation.RELATIVE_TO_SELF和 Animation.RELATIVE_TO_PARENT是相对于自身和父布局,位置的值通过这些参数的设置之后,会变成什么样。

使用起来是不是很简单,都是比较基础的操作,基本上了解了TranslateAnimation的几个重要属性,以及参数值的定义和表现形式,就可以很快上手,写出各种动画效果,比如固定一个点,然后让这个view围绕这个点转圈,这个就是我下一篇要介绍的RotateAnimation动画的效果了。