我使用下面的类在我的应用程序中播放动画。当视图树很简单时,这种方法效果很好。虽然,它卡住了,当我使用它在一个复杂的片段(即视图可能透支)。有什么方法可以优化效率吗?我听说过使用表面视图和控制我的活动重绘区,但我需要一些例子。非常感谢。
这是我的代码
private ValueAnimator performAnim(final View target1, final int start, final int end, final int duration) {
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, duration);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
private IntEvaluator mEvaluator = new IntEvaluator();
@Override
public void onAnimationUpdate(ValueAnimator animator) {
Integer currentValue = (Integer) animator.getAnimatedValue();
float rate = currentValue/((float)duration);
Log.d("zcc", "currentValue" + currentValue);
int value = mEvaluator.evaluate(rate, start, end);
Log.d("zcc", "+" + value + "start : "+ start + " end : "+ end + " duration : " + duration);
((LayoutParams) target1.getLayoutParams()).leftMargin = value;
target1.requestLayout();
}
});
valueAnimator.setDuration(duration);
return valueAnimator;
}
requestLayout()方法将度量和布局视图。因此,效率很低。我现在使用的invalid()方法只会重新绘制我更改过的视图。希望对大家有所帮助