Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android视图动画和硬件层_Android_Animation_Hardware Acceleration - Fatal编程技术网

Android视图动画和硬件层

Android视图动画和硬件层,android,animation,hardware-acceleration,Android,Animation,Hardware Acceleration,我目前正在尝试解决如何正确使用动画视图 我正在实现一个ViewGroup,它允许用户拖动一个子视图,然后我将其设置为释放时的位置(比如ViewPager在页面上的固定方式)。文章指出,应仅在动画期间启用硬件层 我遇到的问题是,在硬件层启用后,Android必须创建这些层,在Galaxy Nexus上需要70-100毫秒。这意味着我不能在开始动画之前立即执行,因为拖动和动画之间的延迟将非常明显。出于同样的原因,我在开始拖动时也无法启用它 现在,这种延迟只在第一次创建硬件层时出现,因此理想情况下,我

我目前正在尝试解决如何正确使用动画视图

我正在实现一个ViewGroup,它允许用户拖动一个子视图,然后我将其设置为释放时的位置(比如ViewPager在页面上的固定方式)。文章指出,应仅在动画期间启用硬件层

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

现在,这种延迟只在第一次创建硬件层时出现,因此理想情况下,我希望在视图添加到布局后立即创建它们。有人指给我看,但我不知道该怎么做

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

缓存中没有层时会发生延迟,后续调用setLayerType(无)/setLayerType(硬件)时不应看到此延迟。您可以从onSizeChanged()调用buildLayer(),强制生成一个层,然后将其放入缓存(调用setLayerType(NONE)将层移动到缓存)

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


不应保持图层处于启用状态的原因是每次视图更新时,它会使绘图工作量加倍。例如,如果将ListView移动到层中,然后滚动列表,滚动动画期间的每个帧更新将导致:(a)列表重新绘制到层中(b)要在屏幕上绘制的层。这非常浪费,可能会导致性能问题,具体取决于用户界面的复杂性。

什么是“硬件层”-GLSURFACHEVIEW?我的意思是:好吧,我可能会庆祝得早一点。我不小心把它忘在五金店了。我可以看到它在onSizeChanged()之后创建层,通常需要70+毫秒。然而,当我第一次切换到硬件时,当我需要设置动画时,同样的事情也会发生。只是要清楚,我得到了两次大延迟。一次是从onSizeChanged()构建层(),一次是第一次为视图设置动画。在那之后,就没有耽搁了。