ハードウェアアクセラレーションを使用する(1)


Android3.0以降から、画面の描画を高速化する仕組みであるハードウェアアクセラレーションが使用できるようになりました。

ハードウェアアクセラレーションを使用すると、画面描画だけでなく、アニメーションも高速化することができるようになります。

今回から2回に分けてハードウェアアクセラレーションの解説をします。

詳細はイカから。

ハードウェアアクセラレーションとは

ハードウェアアクセラレーションはAndroid3.0以降の端末に搭載されているGPUを使用して画面描画を高速に行う技術です。

Google純正のアプリではブラウザやカレンダに使用されています。

ハードウェアアクセラレーションを使用するために

ハードウェアアクセラレーションを使用するためには、AndroidManifestで”android:hardwareAccelerated“属性の値をtrueに設定する必要があります。

この属性を指定できるタグはイカの通りです。

  • Application
  • Activity
  • View

android:hardwareAccelerated属性はイカのように各タグの階層ごとにON/OFFを指定できます。

<application android:hardwareAccelerated="true">
    <activity android:hardwareAccelerated="false"/>
</application>

ハードウェアアクセラレーションはWindowにも設定することができます。

イカにWindowに対して設定する方法を記述します。

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

Windowにハードウェアアクセラレーションを指定してもその配下の個別のViewに対して無効化することもできます。

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

ハードウェアアクセラレーションが設定されているかを確認する

ハードウェアアクセラレーションが設定されているかを確認する為に、イカの2種類のメソッドが用意されています。

  • View#isHardwareAccelerated()
  • Canvas#isHardwareAccelerated()

これらのメソッドの戻り値でtrueが返却された場合はハードウェアアクセラレーションが設定されていることになります。

ハードウェアアクセラレーションが無効な描画機能

CanvasとPaintクラスの一部のメソッドにはハードウェアアクセラレーションが機能しません。

イカはハードウェアアクセラレーションが機能しないメソッドの一覧です。

  • Canvas
    • clipPath
    • clipRegion
    • drawPicture
    • drawPoints
    • drawPosText
    • drawTextOnPath
    • drawVertices
  • Paint
    • setLinearText
    • setMaskFilter
    • drawRasterizer

これら意外にもイカに列挙するメソッドはハードウェアアクセラレーションが使用されている場合に挙動が変化します。

  • Canvas
    • clipRect: XOR 、 DifferenceとReverseDifferenceのクリップモードが無視され、3D変換は、クリップ矩形には適用されません。
    • drawBitmapMesh:色の配列は無視されます
    • drawLines:アンチエイリアシングはサポートされていません
    • setDrawFilter:設定されますが、無視することができます
  • Paint
    • setDither:無視されます。
    • setFilterBitmap:フィルタリングが常にONになります
    • drawRasterizer:テキストだけが動作します

次回予告
次回はハードウェアアクセラレーションをより効果的に実装する為のTipsなどを紹介します。

2 Comments