效果:
前言:刚开始在想用自定义view还是动画,动画其实还是首选的,因为毕竟安卓api已经做了相关处理了,比自定义应该会容易一些的,但是补间动画又没有暂停的效果,后来发现原来属性动画可以,最后就用了属性动画了,不了解动画的朋友推荐启舰的博客,写的非常的详细。
1:找到暂停和开始两个按钮并设置点击事件
TextView tv = (TextView) findViewById(R.id.tv);
tv.setOnClickListener(this);
TextView tv2 = (TextView) findViewById(R.id.tv2);
tv2.setOnClickListener(this);
animator = ObjectAnimator.ofFloat(iv, "rotation", 0f, 360f);
animator.setDuration(15000);
animator.setRepeatCount(ObjectAnimator.INFINITE);
LinearInterpolator lin = new LinearInterpolator();
animator.setInterpolator(lin);
//animator.setRepeatMode(ObjectAnimator.INFINITE);
animator.start();
setInterpolator是设置差值器为LinearInterpolator意思是以常量速率改变也就是匀速,不设置的话默认是DecelerateInterpolator在动画开始的地方快然后慢,
可根据需要灵活选择
差值器主要有:
AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
AnticipateInterpolator 开始的时候向后然后向前甩
AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator 动画结束的时候弹起
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方快然后慢
LinearInterpolator 以常量速率改变
OvershootInterpolator 向前甩一定值后再回到原来位置
animator.setRepeatCount(ObjectAnimator.INFINITE);
这句话主要实现了循环播放INFINITE是无限的意思
//animator.setRepeatMode(ObjectAnimator.INFINITE);
这句话注释掉了,因为我发现并没有什么用,设置重复次数就够了
3:最后实现点击事件
@Override
public void onClick(View v) {
// animation.cancel();
switch (v.getId()) {
case R.id.tv:
animator.pause();
break;
case R.id.tv2:
animator.resume();
break;
}
}
animator.pause();
暂停动画
animator.resume();
重新开始动画