2012-03-06 12 views
11

私はICS上で開発中で、なぜ SurfaceViewの中に キャンバスを使用すると、Canvas.isHardwareAccelerated()は常にFALSEを返します。SurfaceViewのキャンバス - ハードウェアアクセラレータ

私はこのように非常に基本的な例を試してみた: http://android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html またはこの1:私も私はいくつかに持っているかもしれないドローループ 思考内部の任意のキャンバスコールを持たないためにそれらを修正http://jmsliu.com/199/android-canvas-example.html

特定の描画呼び出しに対してサポートされていないHW accel操作 「サポートされていない図面操作」の下でこのリストを確認しました developer.android.com/guide/topics/graphics/hardware-accel.html しかし、私はそれをしていません。私も、私が指定してる、マニフェスト内部 と一緒に開発者向けのオプション 内フォースGPUレンダリングフラグを使用しています

minSDK/targetSDK> = 14

ながらView.isHardwareAcceleratedは、TRUEを返します Canvas.isHardwareAcceleratedは常にFALSEを返します。

私は、HardwareCanvas.javaがtrueを返している間に、Canvas.javaがisHardwareAccelerated()に対してハードコードされた戻り値falseを持っていることがわかりました。私はHWパスを取得していない理由をいくつか考えます。なぜですか?

SurfaceView内部のキャンバスを高速化することはできますか?

おかげ

答えて

1

は、あなたのアプリがHWアクセラレーションを使用したい、Androidマニフェストに記載されていることがありますか?

これは、あなたが、それはまた、唯一の詳細はhttp://developer.android.com/guide/topics/graphics/hardware-accel.htmlを参照してください、唯一の活動やウィンドウの加速をアクティブに役に立つかもしれない何をしたいのかに応じて、 <application android:hardwareAccelerated="true" ...>

ようなものになるだろう。

ルディ

+0

はいマニフェストファイルでを指定しましたが、実際にはView HWは加速されていてCanvasは表示されません。 – user1019096

+0

私は手掛かりがありません... – nanoquack

+0

それは私のために働いた –

14
SurfaceView.lockCanvas()

によって返さキャンバスは、現時点でハードウェアアクセラレーションすることができません。

+1

これはJellyBean(4.2.1)の場合でもそうですか? – Yahma

+3

はい、それは今の場合です。 –

+2

@RomainGuy私はhide APIの 'public Canvas lockHardwareCanvas()'を見つけましたが、どこで使用するのかわかりませんでしたが、このメソッドを使用してSurfaceViewハードウェアを高速化できますか? – Juude

3

android.view.Surface

の新しい非表示APIメソッドunlockHardwareCanvasがあるようですし、ここでの例です:あなたは本番環境でrelfecationを使用することができます http://androidxref.com/5.1.0_r1/xref/frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.java

関連する問題