设置边距更改时,ValueAnimator滞后

时间:2015-09-04 07:05:02

标签: android animation gpu-overdraw

我使用以下类在我的应用中播放动画。当视图树很简单时,这很有效。然而,当我在一个复杂的片段中使用它时它会卡住(即视图可能被过度绘制)。有没有办法优化效率?我听说过使用表面视图并控制我的Activity的重绘区,但我需要一些例子。非常感谢。

这是我的代码

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;
}

1 个答案:

答案 0 :(得分:0)

requestLayout()方法将测量和布局视图。因此,效率非常低。我现在使用的invalid()方法只会重绘我更改的视图。希望这可以帮助别人