android – 在同时运行多个动画时减少延迟的任何提示?

前端之家收集整理的这篇文章主要介绍了android – 在同时运行多个动画时减少延迟的任何提示?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一旦我的应用程序同时运行~4个动画,动画开始滞后一点.有什么办法可以解决/优化吗?我正在使用ObjectAnimator和ValueAnimator.

最佳答案
因此,如果视图不必在动画期间重绘,则可以在动画持续时间内启用硬件图层.例如:

final View myView = // your view
Animator animator = ObjectAnimator.ofFloat(myView,View.ALPHA,0f,1f);
animator.setDuration(1000);
animator.addAnimatorListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animator) {
        myView.setLayerType(View.LAYER_TYPE_HARDWARE,null);
    }

    @Override
    public void onAnimationCancel(Animator animator) {
        myView.setLayerType(View.LAYER_TYPE_NONE,null);
    }

    @Override
    public void onAnimationEnd(Animator animator) {
        // See https://stackoverflow.com/a/19615205/321697
        myView.post(new Runnable() {
            @Override
            public void run() {
                myView.setLayerType(View.LAYER_TYPE_NONE,null);
            }
        }
    }
}
animator.start();

我建议将该侦听器实现分解为一个单独的类,但一般的想法是,您希望在动画开始后立即将视图放入硬件支持的层(动画属性,如平移,旋转,缩放和alpha在由硬件层支持时非常便宜,然后在动画完成后清除图层.

在onAnimationEnd回调中,如果在onAnimationEnd回调中将图层类型设置为none,则会注意到另一个答案的链接,其中存在4.0.x的错误.如果您只支持4.1及更高版本,则不需要runnable间接.

编辑:如果您正在设置颜色过渡动画,您可能不希望执行上述操作,因为更改视图的颜色将需要重绘它,从而导致它在每个帧上重建硬件层.

猜你在找的Android相关文章