关于TranslateAnimation()的参数问题

TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)是Android中最常用的一个动画方法,第一次用花了好多时间才弄懂里面的几个参数的意思。记录一下,以备查阅!

Delta,表示的是差值,即后一个和前一个的差值。XDelta即表示在X方向上的差值,YDelta表示在Y方向的差值。若XDelta>0,则说明控件向右侧发生移动,否则向左侧移动,Y轴方向同理。

几个参数的意思:
        fromXDelta:即控件在X轴上移动之前的差值,为什么是Delta呢?因为在此之前,该控件可能已经发生过了位移,因此它已经偏离了控件最初始的位置。因此采用了距离最初始位置的偏移量。而这个初始位置是是在调用这个方法之前定义的,比如:

Matrix matrix = new Matrix();
matrix.postTranslate(0, 0);

这里用postTranslate方法定义初始位置为(0,0),初始位置设定之后一直是这个值,不会改变。

        toXDelta:相同道理,想要移动的终点位置距离最初始位置的偏移量。记住,一定不要把这个最初始位置当成是移动开始前控件的位置,否则将会发生错误移动。
        后面两个参数表示Y方向上的,和X方向上的同理。需要说明的是,这个是绝对偏移量,是以像素为单位进行计算的。


下面是一个例子,只涉及X方向移动:

Matrix matrix = new Matrix();
matrix.postTranslate(0, 0);//设置初始位置

Animation animation = null;

int one = 1000;
{
switch (arg0) {
case 0:
animation = new TranslateAnimation(one, 0, 0, 0);

//从位置1移动到位置0,开始位置为(one,0),移动之前的位置(one,0)到初始点(0,0)的X轴差值为one,故第一个参数值为one。移动之后的位置为(0,0),与初始位置(0,0)X轴差值为0,故第二个参数值为0.
break;
case 1:
animation = new TranslateAnimation(0, one, 0, 0);

//从位置0移动到位置1,开始位置为(0,0),与初始位置(0,0)X轴上的差值为0,故第一个参数为0.移动之后的位置为(one,0),与初始位置(0,0)X轴上的差值为one,故第二个参数为one。
break;
}
}

currIndex = arg0;
animation.setFillAfter(true);// True:图片停在动画结束位置
animation.setDuration(200);
cursor.startAnimation(animation);


描述不对之处,请指正!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值