Android TextureView Hardware Acceleration with lockCanvas()

我正在尝试在我的画布上使用Android的硬件加速。我曾经做过一个画布,后来我画了一个画布,但我改用了,因为我无法使用硬件加速。我目前正在尝试让此画布使用硬件加速。SurfaceViewlockCanvas()TextureViewSurfaceView

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

给我输出:真,假(是一个thisTextureView)

有谁知道为什么不是硬件加速,以及如何做到这一点?canvas

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


答案 1

TextureView仅当应用程序是硬件加速时才起作用,但它返回的当前从不硬件加速。这意味着您将在软件中绘制,但其本身将使用GPU绘制。目前,获得硬件加速 Canvas 的唯一方法是使用 View 的方法。CanvaslockCanvas()TextureViewCanvasTextureViewonDraw(Canvas)


答案 2

请查看硬件加速一文。

基本上,如果您希望硬件加速,则必须确保在 TextureView 的上下文中以某种方式启用硬件加速,即以下选项之一:TextureView

  • 在应用程序级别:<application android:hardwareAccelerated="true" ...>
  • 在活动级别:<activity android:hardwareAccelerated="true" />
  • 在窗口级别:

getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

请注意,硬件加速实际上是使用纹理视图所必需的:

TextureView 只能在硬件加速窗口中使用。在软件中渲染时,TextureView将不绘制任何内容。


推荐