我有一个以固定速率调用的方法(updateValue)(例如:300ms)。我需要改变视图的比例(在0.1 - 1.0之间),这意味着我需要连续开始动画
我是按照以下方式做的
public static void updateScale(final View view, Double newValue) {
if (dB == null) {
dB = MAX_DB;
}
float to = (float) (newValue / MAX_VALUE);
long time = 500;
if (to > 1f) {
to = 1f;
}
Animation anim = (Animation) view.getTag(R.string.anim_tag);
Object animScale = view.getTag(R.string.anim_scale);
final float from = animScale == null ? 1f : (float)animScale;
float diff = Math.abs(from - to);
if (diff < 0.00001) {
Log.d(BuildConfig.TAG, "Skip no animation");
return;
}
if (anim == null || anim.hasEnded()) {
anim = new ScaleAnimation(1f, 1f, from, to);
anim.setDuration(time);
anim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
view.setScaleY(from);
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
view.setTag(R.string.anim_tag, anim);
view.setTag(R.string.anim_scale, to);
view.startAnimation(anim);
} else {
view.setTag(R.string.anim_scale, to);
}
}
动画看起来很流畅,但有点像闪烁。我尝试过不同的方式,也是出于某些原因我需要在动画结束或开始时设置比例,以便在视图上保持更改