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

原文地址:https://www.cnblogs.com/niray/p/3920025.html