android实现光盘转动效果

因为项目需要实现一个变速转动的效果。尝试过程中遇到了两个动画切换时停顿的现象。现在也没有一个好的方案,把今天我的尝试过程记录一下,看看有没有大神能给点建议。


最开始想当然地写了一个循环,循环里面进行动画的设置,后一个动画的开始旋转的角度前一个动画结束时的角度,每次旋转角度差为45*i*i。

最开始的代码如下:

<span style="white-space:pre">		</span>ImageView tv = (ImageView) findViewById(R.id.imageView1);
<span style="white-space:pre">		</span>ObjectAnimator oa ;
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>for(int i=1;i<10;i++)
<span style="white-space:pre">		</span>{
                oa = ObjectAnimator.ofFloat(tv,"rotation", 45*(i-1)*(i-1),45*i*i);
<span style="white-space:pre">		</span>oa.setDuration(500);
<span style="white-space:pre">		</span>oa.setStartDelay((i-1)*500);<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>oa.start();
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>}
代码运行时发现前后两个动画在切换时,后一个动画总要先停上一下。运行的时候就有一顿一顿的感觉,没有达到预期效果。
后面想着可能是因为旋转角度变化率不均匀可能会导致这种现象,于是乎就将变化率更改成固定的变化率。

代码如下:

		ImageView tv = (ImageView) findViewById(R.id.imageView1);
		ObjectAnimator oa;

		int rotation = 0;
		
		for (int i = 1; i < 10; i++) {
			int rotation_tmp = 45*i*i/2;//加速度为45,初速度为0,第i次旋转的角度即为1/2a*t*t
			oa = ObjectAnimator.ofFloat(tv, "rotation", rotation, rotation_tmp);
			rotation = rotation_tmp;

			oa.setDuration(500);
			oa.setStartDelay((i - 1) * 500);
			oa.start();

		}

效果有所改善不过还是一顿一顿的只是不那么明显了。感觉还是不爽,想了下,会不会是动画本身开始的时候就会有一点点停顿时间,于是乎把后一次动画的延迟提前50ms。感觉的确好很多。

代码如下:

		ImageView tv = (ImageView) findViewById(R.id.imageView1);
		ObjectAnimator oa;

		int rotation = 0;
		
		for (int i = 1; i < 10; i++) {
			int rotation_tmp = 45*i*i/2;//加速度为45,初速度为0,第i次旋转的角度即为1/2a*t*t
			oa = ObjectAnimator.ofFloat(tv, "rotation", rotation, rotation_tmp);
			rotation = rotation_tmp;

			oa.setDuration(500);
			oa.setStartDelay((i - 1) * 500-50);//将延迟减小50ms
			oa.start();

		}

最后运行下来看着还ok,还有待改善。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值