一.TranslateAnimation参数
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)这四个参
数的含义:
fromxDelta:解释的意思是 动画开始的点离当前View X坐标上的差值。举个例子来理解一下,如果这里
fromxDelta=5,表示这个点的x轴坐标在自己本身位置的右边5个单位。fromxDelta=-5 ,表示的是这个点在自己本身
位置的左边5个单位,也就是说我们我们的平移动画要从自身的向左偏移5个单位开始动画。 fromxDelta也可以理解
为从哪个位置开始动画,当然偏移量是相对于自身的坐标来说的。
toXDelta:动画结束的点离当前View X坐标上的差值。这里我也举个例子来更好的理解一下。如果
toXDelta=5,表示这个点的位置距离动画物体位置x轴右边5个单位。这里toXDelta也可以理解为参照物在x轴方向向
左平移5个单位。
那么fromXDelta=-5,toXDelta=5;又是什么含义呢。这里举例解释一下假设有一个物体A做
TranslateAnimation(-5, 5, 0, 0)的平移动画。这里表示A需要自己从x轴左边方向5个单位移动到自己右边x轴方向5
个单位。反正这个fromXDelta和toXDelta 都是相对自己的距离。
同理toXDelta和toYDelta 大家也就知道什么意思了吧。
二.常见的问题
当你用TranslateAnimation来展现view拖动放手后返回的动画,你会惊奇的发现view都会回到起始的位置。
这个的主要原因是TranslateAnimation只是执行了动画的效果,但是view的真实坐标其实还是它处于移动view放手时
的坐标。所以当你移动view的时候你会发现它会有回弹的效果,并且最后还是返回原来的位置。下面我就解释一下如何解决这个问题:
TranslateAnimation animation = new TranslateAnimation(0, 0, 0,distance);//这里的我是y轴上动画。y起始点是原点。distance是要平移的距离
animation.setDuration(400);
animation.setFillAfter(true);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
mListView.clearAnimation();//这里就是解决到原点的精髓,当动画结尾的时候我们结束动画,并且下面给他位置
mListView.layout(Left(), Top, Right(), Bottom);//这里写你想要弹到起始位置的坐标位置
}
});
mListView.startAnimation(animation);
希望这些能对大家有帮助