我知道这与partial-invalidation-in-custom-android-view-with-hardware-acceleration完全相同,但我想我会更详细地解释我的问题,并希望有人能就如何解决问题找到答案。
我写了一个简单的TicTacToe应用程序,它在模拟器上工作正常。但是我没有在设备上工作,因为当我禁用硬件加速时,我发现它在设备上正常工作。
所有字段都是使用Canvas.drawBitmap()
绘制的,也是带有空白图像的“空”字段。这些线条是用Canvas.drawLine()
绘制的
我正在使用invalidate(Rect)
部分失效,因为我只想重新绘制选择使用相应图像设置交叉/圆的区域Canvas.drawBitmap()
。但随后整个区域无效,意味着我看到整个区域/屏幕是灰色的(白色图像和线条消失),只有交叉/圆形的图像在选择区域中设置。
当我在方法Canvas.getClipBounds()
中用onDraw()
打印出无效的字段rect时,硬件加速它是整个区域(例如“0,0,320,407”)并且没有硬件加速的同一个矩形我使用invalidate(Rect)
无效(例如“106,135,106,135”)。
目前作为解决方法,我重新绘制了相应图像和线条的所有字段。如何防止整个区域因硬件加速而失效?
如果这很重要:我在Samsung Galaxy Young Duos S6312上使用Android 4.1.2版。
此致 桑德罗
答案 0 :(得分:0)
我已在给定的link中发布了我的答案。要了解问题,您应该了解软件渲染和硬件渲染之间的区别。这真是一个很重要的话题,我不会在这里讨论。我认为最好的方法是阅读source code(几天前我做了同样的事情)。关键问题是“什么是DisplayList
以及何时使用”
。在这里重复我的回答,Canvas
中的onDraw
仅用于重建DisplayList。这并不意味着您的视图中的所有内容都将重新绘制。