安卓动画可减少卡顿/断断续续/滞后



所以我一直遇到动画问题,尤其是当两个动画同时发生或加载活动时。我知道这可能是资源问题,主线程中发生了很多事情,导致动画卡顿。

我发现了几个有趣的建议:
1. 线程(线程池执行器)
这里:如何让我的动画更流畅 安卓
2. 设置绘图缓存启用(真)
这里:Android 的 setDrawingCacheEnabled() 是如何工作的?
3. 视图组:动画缓存 = 真
在这里: http://www.curious-creature.org/2010/12/02/android-graphics-animations-and-tips-tricks/

但是,我无法找到任何示例来实现这些事情。有什么想法吗?

在减少卡顿时,我遵循按重要性顺序列出的这些规则,减少了动画中的卡顿量:

  1. 不要在onCreateonStartonResume中启动动画。
  2. 在用户事件(如onClick)上启动动画,并禁用触摸事件,直到动画完成。
  3. 不要同时启动超过 2 个动画。

如果您使用的是动画,则应遵循 android 文档; 事实上,在某些情况下,您可能需要将片段过渡推迟一小段时间。例如,在我的情况下,我需要推迟我的动画,直到我的视图模型返回一些数据:

在输入片段onViewCreated()方法中使用postponeEnterTransition()

public class A extends Fragment {
    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        ...
        postponeEnterTransition();
    }
}

数据准备好开始转换后,请拨打startPostponedEnterTransition()

public class A extends Fragment {
    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        postponeEnterTransition();
        final ViewGroup parentView = (ViewGroup) view.getParent();
        // Wait for the data to load
        viewModel.getData()
            .observe(getViewLifecycleOwner(), new Observer<List<String>>() {
                @Override
                public void onChanged(List<String> list) {
                    // Set the data on the RecyclerView adapter
                    adapter.setData(list);
                    // Start the transition once all views have been
                    // measured and laid out
                    parentView.getViewTreeObserver()
                        .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                            parentView.getViewTreeObserver()
                                .removeOnPreDrawListener(this);
                            startPostponedEnterTransition();
                            return true;
                        });
                }
        });
    }
}

最新更新