欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记一次动画使用总结

程序员文章站 2022-04-30 09:33:16
...

参考文章
https://blog.csdn.net/ruingman/article/details/54288403
https://hencoder.com/ui-1-6/
https://hencoder.com/ui-1-7/
这次实现的效果记一次动画使用总结

页面布局就不说了,就是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的值

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

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