Android动画——TranslateAnimation

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29951983/article/details/53772999

动画大家都很熟悉了,最近在研究动画,对TranslateAnimation的构造方法和XML文件写法有些迷惑,就多实验了几次,进行总结一下:

1、 构造函数

  • 第一种
TranslateAnimation translateAnimation=new TranslateAnimation(300,500,300,500);

构造函数:

 public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) {}

这个用的频率比较高
fromXDelta:动画开始时X的起点坐标
toXDelta:动画结束时X的终点坐标
fromYDelta:动画开始时Y的起点坐标
toYDelta:动画结束时Y的终点坐标

  • 第二种
TranslateAnimation translateAnimation=new TranslateAnimation(TranslateAnimation.RELATIVE_TO_PARENT,0.9f,TranslateAnimation.RELATIVE_TO_PARENT,0.5f,TranslateAnimation.RELATIVE_TO_PARENT,0f,TranslateAnimation.RELATIVE_TO_PARENT,0f);

构造函数:

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

简单说一下,这里面提到了一个Type,先来看看Type都有什么:

public static final int ABSOLUTE = 0;

注释:The specified dimension is an absolute number of pixels.
从这个翻译上就能很清除的明白指定一个尺寸是像素的绝对值。
也就是说可以在上面写数字,写的数字就是屏幕上的像素,比如说要从(0,0)点运动到(100,100)这个点,那么这个值就应该传递为:

TranslateAnimation(
 TranslateAnimation.ABSOLUTE,0,TranslateAnimation.ABSOLUTE,100,TranslateAnimation.ABSOLUTE,0,TranslateAnimation.ABSOLUTE ,100) {
 }

其实大家不难发现,调用四个参数的构造函数和调用八个参数的构造函数是一样的:

public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) {
        mFromXValue = fromXDelta;
        mToXValue = toXDelta;
        mFromYValue = fromYDelta;
        mToYValue = toYDelta;

        mFromXType = ABSOLUTE;
        mToXType = ABSOLUTE;
        mFromYType = ABSOLUTE;
        mToYType = ABSOLUTE;
    }

看到了吧,这里把type自动加上了ABSOLUTE。

public static final int RELATIVE_TO_SELF = 1;

注释:The specified dimension holds a float and should be multiplied by the height or width of the object being animated.
意思就是说你设置完RELATIVE_TO_SELF这个类型之后,你所填写的值应该是浮点型的,这个值会乘以被调用执行动画对象的宽和高。
比如说你设置了一个Text View,那么这个浮点值就会分别乘以你这个TextView的宽和高,从常量名字也能看出来——相对自己。

public static final int RELATIVE_TO_PARENT = 2;

注释:这个跟上面的RELATIVE_TO_SELF很相似,只不过这个是乘以执行动画对象父布局(View)

对于构造函数以上就说两种

2、XML文件写法

大家都知道不仅可以通过代码实现动画,还可以使用res/anim/xxx.xml文件去配置动画,在这里我就只探讨,上面说的那三种常量在XML文件中怎么表示:

    public static final int ABSOLUTE = 0;

    public static final int RELATIVE_TO_SELF = 1;

    public static final int RELATIVE_TO_PARENT = 2;
  • ABSOLUTE在XML写法,直接在XML中写上数字就行了,因为是代表像素的绝对值。
 public static final int ABSOLUTE = 0;
 android:fromXDelta="0"
 android:fromYDelta="0"
 android:toXDelta="0"
 android:toYDelta="100"
  • RELATIVE_TO_SELF在XML写法,因为是相对自己的,所以在写的时候要在末尾的位置加上%。
public static final int RELATIVE_TO_SELF = 1;

注意:这里一定要写成50%,而不要携程0.5,后者就会变成,绝对值写法了(ABSOLUTE)

  android:fromXDelta="0"
  android:fromYDelta="0"
  android:toXDelta="0"
  android:toYDelta="50%"
  • RELATIVE_TO_PARENT在XML写法,这个是相当于与父布局(View),所以要在末尾加上%p。
public static final int RELATIVE_TO_PARENT = 2;

该下面的代码意为被执行动画的View,移动到父布局50%的位置。

  android:fromXDelta="0"
  android:fromYDelta="0"
  android:toXDelta="0"
  android:toYDelta="50%p"

对于我上面所说的XML如果有怀疑的地方,大家可以自己实验一下,实验方法很简单,写两个demo,一个demo用代码实现,另一个demo用XML实现,看看动画移动的位置是否和我以上总结的一样。

展开阅读全文

没有更多推荐了,返回首页