タグ別アーカイブ: Android開発

[Android] 独自のボタンスタイルを定義する


Androidアプリの開発において、きめ細かなUIを提供するためには独自のルックアンドフィールを持つUI部品の提供は欠かせません。もちろん、OSが提供する標準部品を活用することは前提ですが、Androidではあまり幅広い要件をカバーできるようなUI部品の提供が行われていないのも現実です。

今回はボタン(android.widget.Button)の見た目をカスタマイズする方法をメモします。

準備するもの

  • 通常、フォーカス、クリック時の画像
  • 画像のセレクタ (res/drawable/hoge_selector.xml)
  • ボタンのスタイル (res/values/styles.xml など)
  • そしてスタイルを適用するボタン自身
順に見ていきます。
通常、フォーカス、クリック時の画像。9patchを使用して伸縮しても見た目が悪くならないよう調整しておきます。フォーカス時の画像は、フォーカスが当たっている間表示されますので、それなりに見やすい色になるよう配慮します。クリック時の画像はタップしたときの一瞬しか表示されないので派手めにしたほうが分かりやすいでしょう。
画像のセレクタは、ボタンの各状態ごとに使用する画像を定義します。以下のように作成します。
[res/drawable/flat_button_selector.xml]

ボタンのスタイルは、スタイルを適用するボタンのstyleプロパティで参照します。スタイルは以下のように作成します。

[res/values/styles.xml]

ここまで準備できたら、実際のレイアウトファイルに適用してみます。貼りつけたボタンのプロパティ”style”を設定するとプレビューの見た目も変わります。

そして、実行。
device-2011-07-30-195926

EditTextにカスタムInputFilterを適用して入力値の制限を行う


EditTextで入力できる文字の種類や書式を制限したい場合、android:inputType属性を使用すれば大抵の場合は用が足ります。(ちなみにinputTypeの種類についてはこちらに便利な情報がまとまっています)。inputTypeで実現できないような入力制限を行いたい場合にはInputFilterを使用します。

今回、時刻入力フィールドにての入力は0〜59とする、といった制限が必要になったので、ちょっと調べてみました。

以下のようなEditTextを例にとって説明します。

そして、InputFilterを以下のように実装します。

そして、EditTextにフィルタを設定してあげます。

ちなみにこんな感じの画面で使っています。

Linux上のEclipse+ADTでプロパティが編集できない問題の対処法


私は主にUbuntu環境でAndroidアプリを開発しています。

しかし、Linux(GNOME)版Eclipseにはバグがあるらしく、プロパティエディタで[…]というボタンがマウスクリックに反応しないために手書きでプロパティを記入する必要があります。画面数の多いアプリを開発する際には作業効率に大変な影響を及ぼすため、日々ストレスを感じていました。(この問題だけのためにWindows環境への移行を何度も検討しました)

本日この問題を解決する手順がわかったので、ここにメモしたいと思います。手順は醜いですが簡単です。

プロパティ編集画面

編集したいプロパティをクリックしてから、Tab→Spaceの順にキー操作するとダイアログがポップアップします。

ネタ元: Stack Overflow

AndroidアプリをProGuardで難読化する


Android Marketでアプリを公開するにあたって、逆コンパイルなどによるプログラムの解読を防ぎたい場合があります。その目的としては、ライセンス認証やセキュリティに関わる処理の内容を第三者に知られにくくしたいといった場合や、一部ジャンルのゲームなどのようにプログラムの解析によって著しくコンテンツの価値が下がってしまう場合の対応策として利用することなどが考えられます。

Androidアプリを難読化するためのツールとしてはProGuardが利用できます。これは最新のAndroid SDKには含まれていますので、現時点でアプリを公開している方は簡単に導入することができます。

ProGuardに関するAndroid Developers公式サイトのドキュメントはhttp://developer.android.com/guide/developing/tools/proguard.htmlです。

手順を要約すると以下のようになります。

ProGuardを有効にする

プロジェクトルートにProGuardの挙動を設定するためのproguard.cfgを作成します。最新のSDKで新規プロジェクトを作成すると自動的に作成されます。

デフォルトの proguard.cfg の内容:

そしてプロジェクトのルートディレクトリに、ant.propertiesを以下の内容で作成します。(以前はdefault.propertiesでしたがAndroid SDK r14から変更となりました)

準備ができたら、ant releaseまたは、eclipseによるエクスポートウィザードでリリースを行うと自動的に難読化が適用されます。デバッグビルドの場合は難読化は行われず、通常のビルドが行われます。

antビルドの場合はout.dirのディレクトリの下のproguard、そしてeclipseの場合はプロジェクトルート直下のproguardディレクトリに難読化処理の結果が保存されます。保存された内容は、アプリの強制終了などのときにユーザーからレポートされるスタックトレースの解析に利用しますので、リリースの都度保管しておく必要があります。

Android用Roguelike RPG TraqueHackリリース


先月、「とらくえ」なるアクションRPGをリリースしたのですが、システムがこなれていないのと、アクションの部分をうまくゲームにできていなかったことが原因と思うのですが、あまりおもしろいゲームに仕上がりませんでした。

前回の反省を踏まえ、先人の知恵を拝借し、よりゲームとして深みを得るために様々な調整を行った結果、「とらくえ」をベースに、新たなゲームが出来上がりました(まだベータ扱いですが)。見た目は似ていますが、ゲーム性はまったく異なります。

リアルタイムのターン進行を廃止してプレイヤーの操作の都度ターンが進行する非リアルタイム制に変更しました。これにより、忙しい合間を縫ったり、ながらプレイなどの時でもゲームが成立するようになりました。そして、より戦略性を高めるための様々なゲーム要素のアイデアを、NetHackや変愚蛮怒といったローグライクゲーム(Roguelike games)から頂きました。

そんなわけで、今回新しくリリースした「TraqueHack」是非プレイしてみてください。オンラインドキュメントは http://moaione.com/docs/ja/index.php?TraqueHackです。

永く遊べるゲームにしていきたいと思いますので、アイデアや要望などありましたら、Twitterなどでお気軽にお声をかけていただければ幸いです。

Android端末からは右のリンクからダウンロードできます: market://details?id=jp.ne.gate.traque.hack

device4

Android用ノスタルジックアクションRPG「とらくえ」正式リリース


Android用のアクションRPGゲーム「とらくえ」の正式バージョンをリリースしました。

このアプリは以前のエントリにも書きましたが、最初はドラクエのようなゲームを作ろうとしていたのですが、アニメーション処理を追加しているうちにリアルタイムゲームになってしまい、せっかくなのでアクションRPGに変更したものです。

ダンジョンはランダムに生成され、壁を切り崩しながら財宝や階段を探したり、モンスターと戦ったりする内容となっています。

ゲームの目的は、ダンジョンからの脱出です。

現時点のバージョンでは、よりリアルタイムなゲームに馴染むよう、アイテムや呪文のメニューから、頻繁に使用するものを画面の四隅にランチャーとして設定して、必要な時にすぐに使用できるようにしました。これにより、テンポ良くゲームをプレイしていただくことができるかと思います。

要所の戦闘が少々難しいかもしれませんが、シナリオ全体は短く、ゲーム自体もあまり頭を使わずカジュアルにプレイできるようにしてありますので、電車の中や休憩時間でのプレイにも適していると思います。

是非遊んでみてください。

device

Android用ノスタルジックアクションRPG「とらくえ」ベータアップデート


前回のリリースに引き続き、今回の更新(v0.6.1)における変更点は以下の通りです。

  • 経験値システムが導入されました
  • レベルアップにより呪文が使用できるようになりました

タッチパネルやトラックボールどちらでも快適に操作できるようチューニングを進めています。

今後はクエストの増量を予定しています。

device2

Android用ノスタルジックアクションRPG「とらくえ」ベータ開始


「とらくえ」(英語名 Traque)をリリースしました

このアプリは、当初昔懐かしいファミコン時代のRPGを作ろうと思って開発を始めたのですが、作っているうちに何故かリアルタイム性が高くなり、アクションゲームになってしまいました。グラフィックはドラクエ風、ゲームシステムはイース風というところでしょうか。

私自身は爆弾というアイテムが気に入っています。ボンバーマンからヒントを得ました。

今後、モンスターや特殊階の追加、ゲームシステムの改善を通して、最終的にはアイテムや魔法を駆使してダンジョンを豪快に破壊するゲームにしていければと思っています。

関連リンク:

店頭デモや展示ディスプレイを簡単に用意する方法


急なイベントのときに、ちょっとしたディスプレイが必要になることがあります。

Flashなどでデモを作成して全画面再生する方法もありますが、7万円以上もするAdobeの制作ソフトを購入する必要があり、これが個人利用の目的だとかなり高価であると言わざるを得ません。文字や写真がスライドショー的にアニメーションする程度でいいのであれば、PowerPointの利用も視野に入るかと思います。

そんな時、Cloud Publisherを使うと、簡単にアニメーションコンテンツを作成することができます。作成したコンテンツは、一般に普及しているPCやスマートフォンのブラウザで再生することができて便利です。

Cloud Publisherは無料で利用することができます。

利用の手順

  1. Cloud Publisherにログインする (http://moaione.com/publisher)
  2. プログラム(コンテンツ)を作成する
  3. プログラムの設定を「公開」状態にする
  4. ディスプレイに使用したいブラウザでコンテンツにアクセスして再生する (http://moaione.com/museum)

上記の手順で、すぐにデジタルサイネージ端末を用意することができます。

また、Cloud Publisherで作成したコンテンツは、ブラウザだけでなく、Android用のプレイヤー「Cloud Player」を使用することもできます。

作成したコンテンツのサンプルはCloud Museumにあります。

一度お試しください。

cp-konnna-1

HTML5で実現するデジタルサイネージ


久しぶりに個人的な立ち位置でブログの記事を書こうと思います。

元々私のブログはhttp://moai.gate.ne.jp (もあいログ) だったのですが、Calendar Padの公開をきっかけにして、個人的な雑記のような記事をアップし辛くなったので、こちらのブログに移行してきた次第です。あちらのブログは来訪者の7割くらいが米国からのお客さんなので日本語でお馬鹿な記事を書くことができる雰囲気ではなくなってしまったのです。

さて、本題ですが、昨日新しいAndroidアプリをリリースしました。「Cloud Player」です。このアプリは、これまた昨日サービスインした「Cloud Publisher」というWebサービス上で作成したデジタルサイネージコンテンツを再生するアプリです。

技術的な話をしますと、コンテンツはHTML5 Canvasで構成されていますので、近代的なWebブラウザであれば概ね対応しています。ただしトップシェアを誇るInternet Explorerが対応していないため、HTML5ではなくFlashを使用するか迷ったのですが、将来性と実装のやりやすさの点でHTML5を選択しました。

このデジタルサイネージプラットフォームは、当初電子出版プラットフォームを目指して開発を開始したのですが、競合が多くなる状況を予期して、少しばかりニッチではありますが、電子看板・POPの分野の色を強くすることにしました。

電子出版が、作成者・配信者から不特定・特定多数への配信となるのに対して、私が提供したいデジタルサイネージは、作成者から自分が所有する端末への配信が主となる点において、そもそもの流通モデルが異なる形となります。

具体的には、例えば展示会に何か出展しようとする人がいるとして、その人が出展ブースでのプレゼンのためにデジタルサイネージコンテンツを作成して利用するような用途を想定しています。

その他、お店を開いている人が電子POPや看板を作りたいときにも利用できると思います。

デジタルサイネージというと、機材の購入・リースやコンテンツ製作の発注など、気軽に利用できるとは言い難いところがあると思いますが、デジタルサイネージを必要としている人たちは潜在的にたくさんいて、費用や手続きを省略し、敷居を下げることによって普及していくものと考えています。

電子出版が本という紙を電子化していくのと同じように、デジタルサイネージは、チラシやパンフレット、掲示板などのアナログ媒体を電子化していくもので、とても身近なものだというのが私の考えです。より多くの人たちに、媒体の電子化の恩恵を届けていければと切に願っています。