TranslateAnimation 动画参数详解及其bug


一.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);

希望这些能对大家有帮助

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值