带有lockCanvas()的Android TextureView硬件加速

时间:2012-04-01 16:50:16

标签: java android android-canvas hardware-acceleration

我试图用我的画布使用Android的硬件加速。我以前有一个SurfaceView我已经lockCanvas()来获取画布,后来我会画画,但我改为TextureView因为我无法获得SurfaceView使用硬件加速。我目前正试图让这个画布使用硬件加速。

Canvas canvas = this.lockCanvas();
System.out.println(this.isHardwareAccelerated() + ", " + canvas.isHardwareAccelerated());

给我输出:true,false (thisTextureView

有谁知道为什么canvas不是硬件加速,以及如何制作它?

编辑:据我所知,似乎我必须使用OpenGL。但是,我仍然想知道是否有任何宣布的计划可以为这样的画布进行硬件加速。

2 个答案:

答案 0 :(得分:9)

TextureView仅在应用程序是硬件加速时才有效,但从Canvas返回的lockCanvas()目前从未加速硬件加速。这意味着您将在软件内部TextureView的{​​{1}}内绘制,但Canvas本身将使用GPU绘制。目前,获得硬件加速Canvas的唯一方法是使用View的TextureView方法。

答案 1 :(得分:5)

查看Hardware Acceleration文章。

基本上,如果您希望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将不会绘制任何内容。