首页 > 代码库 > android中Animation动画的连续播放与播放完毕后停留在最后的状态

android中Animation动画的连续播放与播放完毕后停留在最后的状态

我们做安卓应用的苦逼程序员们常常会需要用到Animation也就是动画。比如做地图功能的时候。我们在手机旋转时需要根据手机重力感应来调整地图的角度,让它上面的“北”一直指向地球的北面。。。
好多人做动画的时候会遇到这么两个难题(我也曾经遇到过):
1:动画执行完了一遍后又立刻恢复到了初始状态,或者动画只能不断循环动作。【问题:我想让动画动到某个位置或转到某个角度后停在那里,该如何做呢?】
2:点击按钮一、动画从0度转到了10度,我再点击按钮二、需要动画从之前的10度位置再继续转到20度。再点击按钮三......【问题:如何让动画连续起来?而不是每次都有从0度开始转到10、再从0度开始转到20度......】

针对上面两个问题我们来看看动画类,这里我拿RotateAnimation(旋转动画,其他动画有类似之处)来讲解:
RotateAnimation(float fromDegrees,float toDegtees,float pivotX,float pivotY);
这里面 :
fromDegrees为旋转动画的起始角度
toDegtees为旋转动画的结束角度
pivotX和pivotY为旋转动画的锚点位置,也就是说我的动画是根据哪个顶点来旋转的。
从参数来看,我们只要在一次动画执行完毕后记录当前动画转到了哪里,再在下次执行动画的时候将这个记录下来的位置传给fromDegrees就会发现你的动画接着上次的位置继续旋转了下去。这样我们就解决了问题2了。
再看看问题1:想让动画执行完毕后固定在动画结束的那一帧上可以设置rotateAnimation.setFillAfter(true);方法。将值传为true就可以了。。。

/**旋转的动画     * @param mView            需要选择的View     * @param startDegress    初始的角度【从这个角度开始】     * @param degrees        当前需要旋转的角度【转到这个角度来】     */    public void showAnimation(View mView,int startDegress,int degrees)     {        float centerX = mView.getWidth() / 2.0f;        float centerY = mView.getHeight() / 2.0f;        //这个是设置需要旋转的角度(也是初始化),我设置的是当前需要旋转的角度        RotateAnimation rotateAnimation = new RotateAnimation(startDegress,degrees,centerX,centerY);//centerX和centerY是旋转View时候的锚点        //这个是设置动画时间的        rotateAnimation.setDuration(10);        //动画执行完毕后是否停在结束时的角度上        rotateAnimation.setFillAfter(true);        //启动动画        mView.startAnimation(rotateAnimation);    }

From:http://blog.csdn.net/zhtqmima/article/details/12910871