2008年03月28日

Androidプレゼンテーション

さて、前回に続いて、Androidのアプリケーションを作りました。

今度は、「Androidでプレゼン!」ということで、プレゼンテーションをするためのツールを作ってみました。
こちらから、ダウンロードできます。ソース&サンプルです。


今回のキモは、「画面の書き換え」です。
通常のView(画面)は、layout XMLによる画面の定義 と それを動的に(DBからのデータを表示など)書き換えるためのActionを定義したJavaアプリという2つのものが連携して、画面が定義されます。

しかし、プレゼンテーションにおいては、

画面の定義 + 次の画面への移動

が、基本的な動きとなります。
しかし、AndroidのView(画面)の仕様ですと、「次の画面への移動」を実現するために、各ページごとのActionのJavaアプリを書かなくてはなりません。

でも、プレゼンを書きたいだけであれば、ActionのJavaアプリまで書きたくありません。

そこで、今回は、layout XMLだけで、「次の画面への移動」が出来るようにしました。


■仕様
・layout XMLによる、画面の定義
layout XMLのファイル名を、

presentation_page_N.xml
N・・・ページ番号

各ページの画面を定義することにより、「presentation_page_N.xml」が1枚に付き、1画面として構成される。
Viewは、全て使用することが出来るため、通常のAndroidのViewと同じ手順で記述可能。

※次のページへは、「↓」または「→」キーで、前のページへは、「↑」または「←」キーで移動する。

・テキストのフェード処理の追加
「次の画面への移動」と同じ動作で、ViewFlipperが動作するように改良。




■キモの解説
・ActionにおけるView(画面)の設定とは?
Action内で、layout XMLを画面として設定する(layout XMLとして、presentation_page_N.xmlを適用したい場合)には、

setContentView(R.layout.presentation_page_N)

のように、行います。
こうすると、layout XMLに定義された画面がAction(アプリケーション)に適用されます。


・R.layout.presentation_page_Nとは?
R.layout.presentation_page_Nは、Androidが自動で生成する「Rファイル」と呼ばれるものの一部です。

layout XMLが、「R.layout.layout XMLのファイル名」という命名規則にしたがって、Rファイル内に「static int」型として、登録されます。

そして、これを使用して、layout XML情報を取得するという形なのです。


・presentation_page_N.xml の取得
少し考えてみると、

「R.layout.presentation_page_N」は、「static int」型であり、Androidにおいては、変更されないことが前提となっている

と予測されます。
しかし、

「static int」型ということは、事前に作られていることも前提となっている

ということでもあります。
が、

「R.layout.layout XMLのファイル名」という命名規則は決まっている

のです。
ということは、

layout XMLのファイル名に命名規則があれば、RファイルからReflectionAPIを用いて取得することが可能

であります!

・まとめると、、、
ということで、下記のような処理を行っているのが実体となります。

1,layout XMLのファイル名を、「presentation_page_N.xml」という命名規則に基づいて定義する(N・・・ページ番号)
2,ReflectionAPIを用いて、Rファイルのlayoutから、presentation_page_Nという名前のFieldを取得する
3,上記のFieldから、int値を取得して、ListやMapに保持しておく
4,次ページ処理時は、上記のListやMapから、layout XMLのファイル名のintを取得して、setContentView(int)メソッドで、画面(VIew)の書き換えを行う。

ということで、Androidアプリと言うよりは、Androidハックという感じの一発ネタアプリとなっております。(;^_^A アセアセ・・・

trackbacks

執筆/雑誌/SD/2009/03/第4章/仮想現実感 from 日本Androidの会(日本アンドロイドの会) (PukiWiki/TrackBack 0.3)

執筆/雑誌/SD/2009/03 まず、動かすには。 † JMFをインストールする JMF 2.1.1e Softwareより、入手してく...

Creative Commons License
This weblog is licensed under a Creative Commons License.