在动画视图时使用硬件层

时间:2012-11-29 15:23:15

标签: android android-animation

在过去的几个小时里,我一直试图在动画中修复一些丢帧。第一次运行动画时我会掉落~5帧(同一视图上的后续动画非常流畅)。我想我会在动画时尝试使用硬件层,但它不起作用(动画没有区别),使用软件层确实解决了丢帧的问题。

然而,当使用软件层时,我感觉(没有科学测试,可能只是在我脑海中)动画不像使用硬件层/不使用图层那样平滑(在第一个动画后的动画上)一个落后的人。)

所以我想知道如何解决这个/我做错了什么。我可以在第一次使用软件层渲染动画,并在后续动画中禁用图层,但这似乎是一个糟糕的工作。

以下是我使用的代码:

    final View v = .....;

    v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    v.buildLayer();

    ValueAnimator anim = ValueAnimator.ofFloat(0, 180);
    anim.setInterpolator(new AccelerateDecelerateInterpolator());
    anim.setDuration(250);
    anim.addUpdateListener(new AnimatorUpdateListener() {

        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            Float animatedValue = (Float) animation.getAnimatedValue();
            v.setRotation(animatedValue);
        }
    });
    anim.addListener(new AnimatorListenerAdapter() {

        @Override
        public void onAnimationEnd(Animator animation) {
            v.setLayerType(View.LAYER_TYPE_NONE, null);
        }
    });
    anim.start();

1 个答案:

答案 0 :(得分:0)

将图层设置为HARDWARE实际上应该会大幅提高动画的平滑度。如果您在模拟器中测试应用程序,请在虚拟设备设置中选中“使用主机GPU”以从硬件加速中受益。