微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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间接.

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

原文地址:https://www.jb51.cc/android/431289.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐