记一次动画使用总结
参考文章
https://blog.csdn.net/ruingman/article/details/54288403
https://hencoder.com/ui-1-6/
https://hencoder.com/ui-1-7/
这次实现的效果
页面布局就不说了,就是FrameLayout
不过有一点要注意: 指针是长方形的图片,默认的锚点在中心,所以放大缩小旋转都不会改变锚点的位置,上面的演示指针的锚点是在左边,可以在xml文件中设置imageView
的transformPivotX
和transformPivotY
两个属性来设置锚点的位置,也可以在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的值
就这么多吧!颓废的时候就多写写代码,技术自然就上来了,共勉!!!
如果有哪位仁兄觉得哪里写错了或者可以写的更好的欢迎指出,共同进步
推荐阅读
-
记一次在node.js中使用crypto的createCipheriv方法进行加密时所遇到的坑
-
记一次java简单的if语句使用多态重构
-
记一次Vue.js混入mixin的使用(分权限管理页面)
-
使用php的fork进行父子进程代码编写,你至少需要对linux fork有这几点基础的理解。--- 记一次组内同学的fork问题排查
-
记一次使用mavon-editor编辑器的使用过程,添加自己的功能
-
[python]自己的bug自己解,记一次在变量使用过程引发的bug
-
记一次使用innobackupex做全备恢复失败的经历
-
记一次nginx中proxy_pass的使用问题
-
记一次面试总结
-
刷题总结:使用Python-哈希表——根据字符出现频率排序、只出现一次的数字