在开发Android的Animator时遇到如下问题:

10余年的乌当网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整乌当建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“乌当网站设计”,“乌当网站推广”以来,每个客户项目都认真落实执行。
1. 关于Animator的循环播放:
在Animator动画中有循环的设置方法setRepeatCount(ValueAnimator.INFINITE) , 而对于AnimatorSet需要实现循环播放,实现方法如下代码:
private AtomicBoolean isStart = new AtomicBoolean(false);
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
if (isStart.get()) {
animation.start();
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animatorSet.start();
public void stopRecognizerViewAnim() {
isStart.set(false);
}
2 . 关于View的缩放:
对于View的缩放一般使用scale。如果缩放的是GroupView,则内部的组件也随着缩放。如果不希望缩放内部的view,而仅仅是宽度或高度的缩放, 实现方法如下代码:
mAnimatorSet = new AnimatorSet();
ValueAnimator height = ValueAnimator.ofObject(new WidthEvaluator(), mCurrWidth, mPreWidth);
height.setDuration(DURATION);
mAnimatorSet.playTogether(height);
mAnimatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
mAnimatorSet.start();private class WidthEvaluator extends IntEvaluator {
@Override
public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
int value = super.evaluate(fraction, startValue, endValue);
ViewGroup.LayoutParams layoutParams = getLayoutParams();
layoutParams.width = value;
setLayoutParams(layoutParams);
return value;
}
}3. 如果同一个AnimatorSet中多个Animator需要设置before() 或者after() ,不能再同一个AnimatorSet中设置多个before() 或者after()。例如: play(AAnimator).before(BAnimator).before(CAnimator).. 是错误的。 这个是我个人的理解,如果不正确,请留言告知。