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などを紹介します。