【问题标题】:Android TextureView hardware acceleration with lockCanvas()使用 lockCanvas() 的 Android TextureView 硬件加速
【发布时间】:2012-04-15 12:16:11
【问题描述】:

我正在尝试在我的画布上使用适用于 Android 的硬件加速。我曾经有一个SurfaceView,我在上面做了lockCanvas() 以获得后来绘制的画布,但我更改为TextureView,因为我无法让SurfaceView 使用硬件加速。我目前正试图让这个画布使用硬件加速。

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

给我输出:真,假 (thisTextureView

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

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

【问题讨论】:

标签: java android android-canvas hardware-acceleration


【解决方案1】:

TextureView 仅在应用程序硬件加速时工作,但它从lockCanvas() 返回的Canvas 目前从未硬件加速。这意味着您将在软件中在TextureViewCanvas 内进行绘制,但TextureView 本身将使用GPU 进行绘制。目前,获得硬件加速 Canvas 的唯一方法是使用 View 的 onDraw(Canvas) 方法。

【讨论】:

    【解决方案2】:

    查看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 不会绘制任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2011-12-13
      • 2012-01-30
      相关资源
      最近更新 更多