1|2|3キー/タッチ/トラックボールのイベントをトリガーに描画SurfaceViewは入力を拾う方法がいろいろあります。onFocusChangedここでは、キーイベント、タッチイベント、トラックボールイベントについて見てみます。難しいことは何もなく、SurfaceViewを継承したクラスで、メソッドをオーバーライドするだけです。キーイベント(左)とタッチイベント/トラックボールイベント(右)タッチイベント/トラックボールイベントは、直前の状態に上書きしているので、残像のように表示されます。どちらもSurfaceViewに用意されているコールバックメソッドをオーバーライドするだけですが、気を付けなければならないのは、SurfaceViewがフォーカスを受け取れるようにsetFocusable(true)を呼び出すこと、さらにキーイベントの場合は、requestFocus()などでフォーカスを与えてやることです。透明な背景のSurfaceViewを作るには最後に、透明なSurfaceViewの作り方を説明します。サンプルに「Transparent」というActivityがあります。これを起動すると、以下のような画面になります。Example.zip)をダウンロードして動作させていた読者にとってはいまさらなのですが、今回のActivityの1つはAndroidのテーマを適用しています。Example">AndroidManifest.xmlは上記のように「android:theme」という属性を設定してあります。SurfaceViewを透明にする方法ですが、ポイントは2つあります。【1】AndroidManifest.xmlのActivityの定義1つはAndroidManifest.xmlのActivityの定義です。/>透明にしたいActivityのandroid:theme属性に「@android:style/Theme.Translucent」、またはその派生値を設定します。【2】ソースコードで行うことソースコード上では、SurfaceHolderのsetFormat(int)にPixelFormat.TRANSPARENTまたはPixelFormat.TRANSLUCENTを指定します。今回のデモアプリには、Viewの透明化を行うサンプルも、おまけで入れておきました。完全透明だけではなく、半透明もサポートしています。方法を簡単に説明します。以下のようなXMLを「values」フォルダに定義します。ファイル名は任意でよいです。</style></resources>ここで定義している<drawable>要素が、透明度を含む背景色です。先頭の77の部分がアルファ値で、ffなら不透明、00なら透明です。その後ろは、RRGGBBで色を指定します。この<drawable>要素を独自で定義した<style>要素のandroid:windowBackgroundに指定しています。次に、AndroidManifest.xmlの該当のActivityに、先ほど定義した<style>要素をandroid:themに指定します。/>このようにすれば、GUIフレームワークが自動で指定した色と透明度で背景を塗りつぶしてくれます。SurfaceViewはGUIフレームワークから独立しているので、この仕組みが使用できないのです。ESを使うと、もっとイロイロできるこれで背景が透明なActivityとSurfaceViewの完成です。残念なことに、透明のSurfaceViewは一度何かを書いてしまうと、後から透明色で塗りつぶせないため、使い勝手がいまひとつです。ES)を使うか、のどちらかになってしまいます。ESについては、今後取り上げたいテーマなので、そのときに詳しく説明しようと思います。ESとAndroidについては、下記記事もご参照ください。KitKatの新機能39選もはや無料BaaS。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。