笔记88 | 仿网易云音乐的圆盘指针动画

之前我们平台音乐的圆盘指针都是写死不动的,我这燥脾气哪受的了这个,最近时间相对充裕一些,就抽个时间整出来了,效果相对之前,还是有提升的。

效果图如下:

代码如下,都备注好了,一看就明白!

代码语言:javascript
复制
Animation rotateAnimation = null ;    int isAnimationState = -1;    int time1,time2 = 0;    private int animAngle = 25; //角度    private int animTime = 1000; //动画时间    private void showrotateAmin(int i){        time1 = animAngle;        time2 = animTime;        /**         * 判断是否为连续点击         * 根据1秒内两次点击判断         */        if ((System.currentTimeMillis() - exitTime) > 1000) {            exitTime = System.currentTimeMillis();        } else {            if ((System.currentTimeMillis() - exitTime) > 0){                time2 = (int) (System.currentTimeMillis() - exitTime); //记录上次点击所引起的动画运行时间                time1 = Math.round((float) (time2*0.001)*animAngle);//根据运行时间来计算已走的角度            }        }        switch (i) {        case 0://初始启动状态 (停止的情况            if (isAnimationState == 0) {                return;            }            rotateAnimation = new RotateAnimation(                    0,// 1. fromDegrees :动画开始时 视图的旋转角度(正数 = 顺时针,负数 = 逆时针)                    animAngle,// 2. toDegrees :动画结束时 视图的旋转角度(正数 = 顺时针,负数 = 逆时针)                    Animation.ABSOLUTE,// 3. pivotXType:旋转轴点的x坐标的模式                    9,// 4. pivotXValue:旋转轴点x坐标的相对值                    Animation.ABSOLUTE,// 5. pivotYType:旋转轴点的y坐标的模式                    10  // 6. pivotYValue:旋转轴点y坐标的相对值                    );            // pivotXType = Animation.ABSOLUTE:旋转轴点的x坐标 =  View左上角的原点 在x方向 加上 pivotXValue数值的点(y方向同理)            // pivotXType = Animation.RELATIVE_TO_SELF:旋转轴点的x坐标 = View左上角的原点 在x方向 加上 自身宽度乘上pivotXValue数值的值(y方向同理)            // pivotXType = Animation.RELATIVE_TO_PARENT:旋转轴点的x坐标 = View左上角的原点 在x方向 加上 父控件宽度乘上pivotXValue数值的值 (y方向同理)            rotateAnimation.setDuration(0);            isAnimationState = 0;            break;        case 1://pause 暂停动画            if (isAnimationState == 1 || isAnimationState == 0) { //防止连续运行同一个动画                return;            }            rotateAnimation = new RotateAnimation(animAngle-time1,animAngle,Animation.ABSOLUTE,9,Animation.ABSOLUTE,10); //会根据上次动画停留的角度开始运行            rotateAnimation.setDuration(time2);            isAnimationState = 1;            break;        case 2: //play 播放动画            if (isAnimationState == 2 || isAnimationState == 3) {                return;            }            rotateAnimation = new RotateAnimation((time1),0,Animation.ABSOLUTE,9,Animation.ABSOLUTE,10);            rotateAnimation.setDuration(time2);            isAnimationState = 2;            break;        case 3:////初始启动状态 (运行的情况            if (isAnimationState == 3) {                return;            }            rotateAnimation = new RotateAnimation(animAngle,0,Animation.ABSOLUTE,9,Animation.ABSOLUTE,10);            rotateAnimation.setDuration(0);            isAnimationState = 3;            break;        }        rotateAnimation.setFillAfter(true);         findViewById(R.id.album_hand).startAnimation(rotateAnimation);    }