记一次动画使用总结

参考文章
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的值

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

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

觉得有用就点个赞吧

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,721评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,537评论 5 13
  • 1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi阅读 10,598评论 3 23
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,053评论 3 119
  • 【健康养生小知识 】一 嘴巴提示您: ① 嘴角裂:脾有火肺气不足。 建议: 绿豆百合汤; ② 嘴唇干:肝肾阴虚。 ...
    程永翠阅读 1,652评论 0 0

友情链接更多精彩内容