gpt4 book ai didi

Android View 动画和硬件层

转载 作者:可可西里 更新时间:2023-11-01 18:46:52 27 4
gpt4 key购买 nike

我目前正在研究如何正确使用 hardware layers动画 View 时。

我正在实现一个允许用户拖动 subview 的 ViewGroup,然后我将其动画化到他们释放时的某个位置(就像 ViewPager 将如何停留在页面上)。 This文章指出您应该只在动画期间启用硬件层。

我遇到的问题是,在启用硬件层后,Android 必须创建层,这在 Galaxy Nexus 上需要 70-100 毫秒。这意味着我不能在开始动画之前立即执行此操作,因为拖动和动画之间的延迟会非常明显。出于同样的原因,我在开始拖动时也无法启用它。

现在,这种延迟仅在第一次创建硬件层时出现,因此理想情况下,我希望在将 View 添加到布局后立即创建它们。我被指向了 View.buildLayer() ,但我不确定如何处理这个问题。

  • 实现这一目标的正确方法是什么?
  • 我的 ViewGroup 中是否有任何方法可以覆盖并在 subview 上调用 buildLayer()?
  • 硬件层能否以某种方式失效,从而导致另一个 70-100 毫秒的延迟?我该如何处理?

最佳答案

当缓存中没有层时会发生延迟,您不应该在后续调用 setLayerType(NONE)/setLayerType(HARDWARE) 时看到此延迟。您可以从 onSizeChanged() 调用 buildLayer() 以强制构建层,然后放入缓存(调用 setLayerType(NONE) 将层移动到缓存。)

请注意,您看到的延迟在很大程度上取决于您运行的设备。

您不应该启用图层的原因是每次 View 更新时绘图工作量都会加倍。例如,如果将 ListView 移动到图层中,然后滚动列表,则滚动动画期间的每一帧更新都会导致:(a) 列表重新绘制到图层中 (b) 在屏幕上绘制图层。这是非常浪费的,并且可能会导致性能问题,具体取决于您的 UI 的复杂性。

关于Android View 动画和硬件层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com