我试图用我的画布使用Android的硬件加速。我以前有一个SurfaceView
我已经lockCanvas()
来获取画布,后来我会画画,但我改为TextureView
因为我无法获得SurfaceView
使用硬件加速。我目前正试图让这个画布使用硬件加速。
Canvas canvas = this.lockCanvas();
System.out.println(this.isHardwareAccelerated() + ", " + canvas.isHardwareAccelerated());
给我输出:true,false
(this
是TextureView
)
有谁知道为什么canvas
不是硬件加速,以及如何制作它?
编辑:据我所知,似乎我必须使用OpenGL。但是,我仍然想知道是否有任何宣布的计划可以为这样的画布进行硬件加速。
答案 0 :(得分:9)
TextureView
仅在应用程序是硬件加速时才有效,但从Canvas
返回的lockCanvas()
目前从未加速硬件加速。这意味着您将在软件内部TextureView
的{{1}}内绘制,但Canvas
本身将使用GPU绘制。目前,获得硬件加速Canvas的唯一方法是使用View的TextureView
方法。
答案 1 :(得分:5)
基本上,如果您希望TextureView
进行硬件加速,则必须确保在TextureView的上下文中启用硬件加速,即下列之一:
<application android:hardwareAccelerated="true" ...>
<activity android:hardwareAccelerated="true" />
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
请注意,使用TextureView:
实际上是硬件加速TextureView只能在硬件加速窗口中使用。在软件中渲染时,TextureView将不会绘制任何内容。