记一次动画使用总结

参考文章
https://blog.csdn.net/ruingman/article/details/54288403
https://hencoder.com/ui-1-6/
https://hencoder.com/ui-1-7/
这次实现的效果

演示.gif

页面布局就不说了,就是FrameLayout

不过有一点要注意: 指针是长方形的图片,默认的锚点在中心,所以放大缩小旋转都不会改变锚点的位置,上面的演示指针的锚点是在左边,可以在xml文件中设置imageViewtransformPivotXtransformPivotY两个属性来设置锚点的位置,也可以在java代码中调用imageview.setPivotX()imageview.setPivotX()来设置锚点 。这里的锚点是相对于view来设置的,就是说如果设置成(10,10) 以view的左上角为原点的坐标(10,10)

之后就用ObjectAnimator来设置动画

private void initAnimator(){
        //圆盘动画
        animator = ObjectAnimator.ofFloat(
                musicPhoto, "rotation", 359).setDuration(7000);//设置7秒转一圈
        animator.setRepeatCount(-1);//不停循环
        animator.setInterpolator(new LinearInterpolator());//设置匀速
        //指针动画
        pointerAnimator = ObjectAnimator.ofFloat(pointer,"rotation",13/*角度*/).setDuration(500);
        pointerAnimatorBack = ObjectAnimator.ofFloat(pointer,"rotation",0/*从当前位置回到0°*/).setDuration(500);
    }

我这里指针动画设置了两个一个下移一个返回。本来用的是 RotationAnimator,后来发现回去的时候会闪一下,因为valueAnimator只改变显示位置,没改变本体位置,就是说动画是播放出来了但是在播放完毕后会立即回到原来的位置,当然也可以调用 rotateAnimation.setFillAfter(true);来让动画停止在结束位置,但是这样并没有改变image的属性,也就是没有改变image的本来的位置,此时在执行别的动画会发现闪一下从原点开始播放

提一下:https://hencoder.com/ui-1-6/这个链接有讲objectAnimator使用,非常详细

接下来就是控制播放动画了

boolean isStart = false;
boolean ispause = false;

start.setOnClickListener(new View.OnClickListener() {
            //这里必须要加上这个,用到start(),resume(),pause()方法就会强制加这个了,你也可以修改你的minSdkVersion改成21
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onClick(View v) {
                if (!isStart) {//如果是停止状态就开始播放
                    pointerAnimator.start();//指针动画开始
                    if (!ispause) {//当前从未播放过
                        animator.start();
                    } else {//用户点击暂停后又点击开始
                        animator.resume();//从暂停位置开始播放
                    }
                    isStart = true;//把播放状态设置成true
                    start.setText("暂停");
                } else {
                    pointerAnimatorBack.start();//指针回去
                    isStart = false;//是否播放状态
                    ispause = true;//是否暂停
                    animator.pause();
                    start.setText("开始");
                }
            }
        });

这里说一下我之前旋转指针的做法

RotationAnimator r = new RotateAnimation(0.0f, 13f,Animation.RELATIVE_TO_SELF, 0.1f,Animation.RELATIVE_TO_SELF, 0.5f);
point.startAnimator(r);

参数:(开始角度,终点角度,用什么确定X坐标(这里是用自身坐标系取X),x轴位置(百分比),用什么确定Y坐标(这里是用自身坐标系取Y),y轴位置(百分比))
Animation.RELATIVE_TO_SELF:用自己坐标系取x,y的值
Animation.RELATIVE_TO_PARENT:以父view的坐标系取x,y的值

就这么多吧!颓废的时候就多写写代码,技术自然就上来了,共勉!!!

如果大牛觉得哪里写错了或者可以写的更好的欢迎指出,共同进步

觉得有用就点个赞吧

你可能感兴趣的:(记一次动画使用总结)