我们做安卓应用的苦逼程序员们常常会需要用到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