Androidで動く携帯Javaアプリ作成入門
Androidで動く携帯Javaアプリ作成入門(12)

SurfaceViewならAndroidで高速描画ゲームが作れる


株式会社イーフロー
緒方聡
2009/12/8

キー/タッチ/トラックボールのイベントをトリガーに描画

 SurfaceViewは入力を拾う方法がいろいろあります。

表2 SurfaceViewの入力イベント
イベント メソッド
キーイベント onKeyDown、onKeyUpなど
タッチイベント onTouchEvent
トラックボールイベント onTrackballEvent
フォーカスイベント onFocusChanged

 ここでは、キーイベント、タッチイベント、トラックボールイベントについて見てみます。難しいことは何もなく、SurfaceViewを継承したクラスで、メソッドをオーバーライドするだけです。

図5 「2」のジェスチャーを再び
図5 キーイベント(左)とタッチイベント/トラックボールイベント(右)
- PR -

 タッチイベント/トラックボールイベントは、直前の状態に上書きしているので、残像のように表示されます。

 どちらもSurfaceViewに用意されているコールバックメソッドをオーバーライドするだけですが、気を付けなければならないのは、SurfaceViewがフォーカスを受け取れるようにsetFocusable(true)を呼び出すこと、さらにキーイベントの場合は、requestFocus()などでフォーカスを与えてやることです。

透明な背景のSurfaceViewを作るには

 最後に、透明なSurfaceViewの作り方を説明します。サンプルに「Transparent」というActivityがあります。これを起動すると、以下のような画面になります。

図6 図4・5のジェスチャーの比較
図6 透明なSurfaceView

 すでに今回のサンプルアプリ(SurfaceView Example.zip)をダウンロードして動作させていた読者にとってはいまさらなのですが、今回のActivityの1つはAndroidのテーマを適用しています。

<activity android:name=".Main"
android:theme="@android:style/Theme.Wallpaper"
android:label="SurfaceView Example">

 AndroidManifest.xmlは上記のように「android:theme」という属性を設定してあります。壁紙のテーマですね。

 さて、SurfaceViewを透明にする方法ですが、ポイントは2つあります。

【1】AndroidManifest.xmlのActivityの定義

 1つはAndroidManifest.xmlのActivityの定義です。

<activity android:name=".Transparent" 
android:label="Transparent SurfaceView"
android:theme="@android:style/Theme.Translucent" />

 透明にしたいActivityのandroid:theme属性に「@android:style/Theme.Translucent」、またはその派生値を設定します。

【2】ソースコードで行うこと

 ソースコード上では、SurfaceHolderのsetFormat(int)にPixelFormat.TRANSPARENTまたはPixelFormat.TRANSLUCENTを指定します。

public MySurfaceView(Context context) {
    super(context);
    getHolder().setFormat(PixelFormat.TRANSPARENT);
    getHolder().addCallback(this);
    setFocusable(true);
}

おまけ 「Viewの透明化をするには」

今回のデモアプリには、Viewの透明化を行うサンプルも、おまけで入れておきました。

図7 「9」というジェスチャー
図7 Viewの半透明

完全透明だけではなく、半透明もサポートしています。方法を簡単に説明します。以下のようなXMLを「values」フォルダに定義します。ファイル名は任意でよいです。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable name="translucent_background">#77ffffff</drawable>
<style name="Theme.Translucent" parent="android:style/Theme.Translucent">
<item name="android:windowBackground">@drawable/translucent_background</item>
</style>
</resources>
ここで定義している<drawable>要素が、透明度を含む背景色です。先頭の77の部分がアルファ値で、ffなら不透明、00なら透明です。その後ろは、RRGGBBで色を指定します。そして、この<drawable>要素を独自で定義した<style>要素のandroid:windowBackgroundに指定しています。

次に、AndroidManifest.xmlの該当のActivityに、先ほど定義した<style>要素をandroid:themに指定します。

<activity android:name=".TranslucentView" 
android:label="Translucent View"
android:theme="@style/Theme.Translucent" />
このようにすれば、GUIフレームワークが自動で指定した色と透明度で背景を塗りつぶしてくれます。SurfaceViewはGUIフレームワークから独立しているので、この仕組みが使用できないのです。

OpenGL ESを使うと、もっとイロイロできる

 これで背景が透明なActivityとSurfaceViewの完成です。ただ残念なことに、透明のSurfaceViewは一度何かを書いてしまうと、後から透明色で塗りつぶせないため、使い勝手がいまひとつです。

 背景を透明にしたまま、かつViewの内容を更新したい場合、Viewを使うか、SurfaceViewのサブクラスであるGLSurfaceView(OpenGL ES)を使うか、のどちらかになってしまいます。

 OpenGL ESについては、今後取り上げたいテーマなので、そのときに詳しく説明しようと思います。OpenGL ESとAndroidについては、下記記事もご参照ください。

@IT関連記事


Androidアプリで高速描画チューニングをするコツ
インタビュー特集:Google直伝!(1) Googleのさまざまなサービスを使いこなすコツをグーグル担当者に聞くインタビュー。初回は日本で端末販売がせまるAndroidについて
リッチクライアント & 帳票」フォーラム 2009/4/21
SIGGRAPH 2003に見るJavaの進化
[コラム]安藤幸央のランダウン(21) 
サンディエゴで開催された「SIGGRAPH 2003」では、いよいよJavaの標準グラフィックAPIの策定の動きが見えた
Java Solution」フォーラム 2003/9/10
今日から始める! Androidケータイアプリ作成の基礎
デザイナも知っておきたい「Androidアプリ」とは 日に日に国内でのニュースが増えているAndroidケータイ。その特徴を押さえてアプリ作成を始めるための基礎を紹介します
業務用途で本当に“使える”モバイル端末はどれだ?
新時代の業務用モバイルRIAを考える(1) iPhoneやAndroid、ネットブックの登場で盛り上がるモバイル業界。しかし業務での利用には“紛失”や操作性などの問題がある
リッチクライアント & 帳票」フォーラム 2009/2/26
Androidのオープン性でガラパゴスから脱出しよう
ものになるモノ、ならないモノ(29)
 ガラパゴスとやゆされる日本の高機能ケータイ。閉塞感に満ちた国内市場から世界に出るための解は、Androidのオープン性にある
Master of IP Network」フォーラム 2008/12/1
Androidは雇い主の分身として仕事をするエージェント
Google Developer Day 2008特集(1) Androidの生みの親、アンディ・ルービン氏が、Androidに込めた思いと展望を語る。「Google Android入門」の著者の嶋氏が聞く
リッチクライアント & 帳票」フォーラム 2008/6/13
Google Android用携帯アプリ作成のための基礎知識
小山博史のJavaを楽しむ(9) 
先日公開されたGoogleの携帯端末プラットフォームAndroid。開発環境の整え方やアプリの作り方、作成に便利なツール、SDKの中身などを解説
Java Solution」フォーラム 2007/12/3
ケータイ分野以外の組み込みデバイス開発の現場でも注目を集めている「Android」。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報・最新動向をお届けします!

1-2-3

 Index
第12回 SurfaceViewならAndroidで高速描画ゲームが作れる
  Page1
Androidの開発者はスィーツがお好き?
ゲーム開発には欠かせない「SurfaceView」とは
コラム 「Viewでもゲームは作れる」
SurfaceViewの最も簡単な使い方
  Page2
Androidのグラフィックスに関する重要なポイント
Androidはダブルバッファリングもやってくれる
Page3
キー/タッチ/トラックボールのイベントをトリガーに描画
透明な背景のSurfaceViewを作るには
おまけ 「Viewの透明化をするには」
OpenGL ESを使うと、もっとイロイロできる


Androidで動く携帯Javaアプリ作成入門 バックナンバー 連載インデックスへ»


ご意見、ご感想は Smart&Social 会議室へどうぞ


 Smart&Social フォーラム トップページへ


TechTargetジャパン

Smart & Social フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH