Android查看动画和硬件图层

Sim*_*nVT 15 animation android hardware-acceleration

我正在尝试在动画视图时弄清楚如何正确使用硬件层.

我正在实现一个ViewGroup,它允许用户拖动子视图,之后我将它设置为释放时的位置(就像ViewPager在页面上的定位一样).文章指出,你应该只启用硬件层为动画的持续时间.

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

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

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

Rom*_*Guy 13

延迟情况发生时,有高速缓存中没有层,你不应该看到这个延迟到setLayerType后续调用(NONE)/ setLayerType(硬件).您可以从onSizeChanged()调用buildLayer()来强制构建一个层,然后将其放入缓存中(调用setLayerType(NONE)将图层移动到缓存中.)

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

您不应该启用图层的原因是每次视图更新时它都会使绘图工作量增加一倍.举例来说,如果移动一个ListView成层,然后滚动列表,滚动动画期间每帧更新将导致:(a)该列表中重新绘制成(b)中要在屏幕上绘制的层中的层.这非常浪费,可能会导致性能问题,具体取决于UI的复杂程度.