zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第六次作业--结对编程
    第四次作业--项目选题报告(团队)
    Eclipse和JDK的安装配置
    最大最小
    文档
    火车
    排队
    击鼓传花
    逆序数
    塔防——链表的基本操作
  • 原文地址:https://www.cnblogs.com/niray/p/3920025.html
Copyright © 2011-2022 走看看