今回新作アプリ「庭師」をレビューしていただきたくまた調べなおしたので一覧を更新しました。国内のレビューサイトはほとんど網羅しているかと思います。写真をベースにいろんなアイテムを追加してガーデニングのシミュレーションが出来る新作アプリ「庭師」では全50種類もの植栽、グラウンド、フェンスアイテムがあります。これからも随時追加予定ですが、一部紹介します。Japan様で簡単な操作で間取り図を作成できるアプリ「間取りー図」という感じでレビューを掲載していただきましたー。ありがとうございました。同じ構成のレイアウトを別ファイルにしてincludeで使うたまにリストにするような不定数ではないけど、同じようなView構成が続く画面レイアウトがあります。こんなやつこんなときはまず繰り返す部分のみのxmlファイルを作ります。</LinearLayout></LinearLayout>そしてそのxmlをincludeして画面を作ります。android:id="@+id/menber3"/></LinearLayout>各includeに同名のidのViewが出来るので、アクセスする場合には必ず親を指定してからアクセスします。((TextView)findViewById(R.id.menber1).findViewById(R.id.title)).setText("班長");((TextView)findViewById(R.id.menber2).findViewById(R.id.title)).setText("メンバーA");((TextView)findViewById(R.id.menber3).findViewById(R.id.title)).setText("メンバーB");こういう変化しない内容はxmlに書きたいところですが、残念ながらinclude内のViewにはコードでしかアクセスできません。公開2013年7月29日月曜日FactoryがmobileASCIIでレビュー掲載されましたーFactoryがmobileASCII様で往年のゲームキッズ集まれ!「Factory」という感じでレビューを掲載していただきましたー。ありがとうございました。プロモーション2013年7月23日火曜日Androidアプリのプロモーションに最適なモックアップ作成サービスGoogleからアプリのプロモーション用にぴったりのモックアップ作成サービスがあったので紹介します。Generatorhttp://developer.android.com/intl/ja/distribute/promote/device-art.html使い方は簡単、まずリストにある端末に応じた解像度のスクリーンショットを用意します。作った画像ファイルをサイトの対象の端末の上にドロップするだけ少し待てば出来上がり。オプションで影と反射の有り無しと端末の縦横を変更できます。position)となっていて文字列では選択できません。setTextなんかで入れれば自動的にリストにある同名の項目が選択状態になればいいのになあ、ということで作ってみました。開発2013年7月17日水曜日Androidのcanvasに描画したイメージを画像ファイルで保存するアプリの中でcanvasに描画したイメージを画像として保存するという機能を付けたくなることがありますが、こんな感じで簡単に出力できます。stream)というような仕様になってますので、必要に応じてFormatをCompressFormat.JPEGに変えたりqualityの部分は0-100間で指定してください。Badgesアプリ公開後に自分のブログやFacebookなんかに、公開したアプリのPlayストアへのリンク(バッジ)を貼ることがあるかと思います。こんな風に...今まで適当に拾ってきた画像にリンクを設定していたんですが、Google公式のバッジジェネレータがありました。badgeを押すだけ。あとは出来たhtmlをコピーして好きなように使ってください。公開2013年7月4日木曜日AndroidでString.Joinしたいので自作Android(Java)にはsplitはあるのにどうやらjoinはないようで、データの保存や送信なんかで使いたい場合もあるので作っておきます。}最近は配列よりもArrayListを使う機会のほうが多いので、ArrayList<String>を引数にするのも作りました。ArrayList<Integer>を引数にするのとか、いろいろバリエーションがあっても便利かもしれませんね。nullチェックは入れていないのでお気を付けください。開発2013年7月3日水曜日Androidで画像をきれいに縮小して描画するAndroidでは様々な解像度の画面に対応するので、それに応じて画像を縮小して描画しています。paint)で描画してみるとちょっと我慢ならない感じだったので、いろいろと試してみました。試したパターンはPaintのsetAntiAliasのあるなし、setFilterBitmapのあるなしとMatrix.postScaleによる縮小です。結果としてはAntiAliasは画像の縮小には関係ないようで、drawLineやdrawPath,drawCircleで効いてくるパラメータかと思います。setFilterBitmap(true)とMatrix.postScaleによる縮小の結果はほぼ同じで通常であればsetFilterBitmap(true)で事足りそうです。こちらの投稿ではMatrix.postScaleで何段階かにわけて縮小することで、さらにきれいにする手法が出ています。場合によってはこの手法を取り入れる必要があるかもしれません。レビューで不具合を報告していただいた方の端末がわかったことと、知り合いにその端末の所有者がいたことから運良く原因を突き止めることが出来ました。いつもうまく行くとは限らず、全てのAndroid端末で試してみることも簡単には行うことはできません。そんな時に非常に助かるのがリモートテストサービスです。リモートテストサービスではサービス側で用意している多くのAndroid端末を、インターネットを経由してリモートでテストをすることが出来るサービスです。二つほどそのようなサービスを見つけたので紹介します。開発2013年7月1日月曜日Androidでの間取り作成アプリのまとめ拙作間取りー図を企画した時に競合するアプリを調査したのですが、その時は見つからずこれはもしかしてAndroid史上初の間取り作成アプリか!?と思ったのを記憶しています。あとあと調べると、どうやら海外の競合アプリがいくつか出ていたようです...参考までに同種のアプリをまとめてみました。(無料)https://play.google.com/store/apps/details?id=se.inard.fpCAD系、Image・PDF・DXF出力が可能のようです。(無料)https://play.google.com/store/apps/details?id=blumatica.rilievimobileCAD系、DXF出力が可能のようです。(無料)https://play.google.com/store/apps/details?id=com.brainspool.bwizplanfreeフリーハンドで描けるお絵かきモードのようなものがあるようです。(315円)https://play.google.com/store/apps/details?id=air.jp.co.magic_hour.roomplus間取りの作成に特化したアプリ建具や家具など100点以上のパーツがあるようです。こちらはiPhone版もある模様。同種のアプリは操作や機能面などいろいろと見習いたい所がありますね。まとめAndroidアプリの作成では様々な端末への対応を考慮しなければなりません。現在どのような端末が出てるのか、調査に便利なサイトをまとめてみました。かなりの数の端末が登録されていて国やキャリア、OS等の条件で検索できます。Playストアで承認されている端末が全部あるのかなと思いましたが、そこまでではないようです。Memory・Battery・Connectivity等のかなり詳しい情報も見ることが出来ます。Galleryhttp://www.android.com/devices/次はこちらWikipediaのAndroid端末一覧ページです。2009年のHT-03Aから始まって、発売日順にメーカー・形状・OSバージョン・キャリア等を一覧で見ることが出来ます。Android端末一覧http://ja.wikipedia.org/wiki/Android%E7%AB%AF%E6%9C%AB%E4%B8%80%E8%A6%A7次はスマートフォンデータベースです。スマートフォン231機種のスペックをキャリア・メーカー・OSバージョン・性能・機能等の条件を指定して一覧で見ることが出来ます。AppKitBoxのサイトです。キャリアごとにメーカー・OSバージョン・解像度・CPU等を一覧で見ることが出来ます。SIZ.ESというサイトです。こちらの特徴として、独自の方法で計算された指標ではありますがpopularityとういう項目で端末の人気度を見ることが出来ます。SIZ.EShttp://screensiz.es/以上参考までに。間取りー図が5万ダウンロードを達成しましたーこのたび間取りー図が5万ダウンロードを達成しましたー。これもひとえにダウンロードしていただいたユーザーの皆様のおかげです。公開開始が2012年11月6日でしたので、約7か月半での達成となりました。この間10回程のバージョンアップを行いました。ユーザーからの不具合報告や要望はありがたい限りです。国別でみると日本が66.84%、アメリカ7.4%、他25.76%と意外に海外の方も利用して頂いているようです。1.2.0で対応したりもしました。今後も機能追加や改善に励みたいと思いますので、よろしくお願いいたします。使い方を間違っているだけなのに落とし穴と書いてると怒られそうですが、昨日修正を公開した間取りー図での不具合は、リソースのdimen.xmlでdip単位で書いてある値をSurfaceViewのボタンの大きさ指定に使っているのですが、ここで間違った計算をしているのが原因でした。最近間取りー図のユーザーレビューで・ボタンが見切れてほとんど使えない・5インチフルHDの画面なんだけど、各種ボタン(+-や反転等の)の大きさが極端に合ってないという報告が上がってきていて、ボタンはdipの値から計算してサイズ設定しているからそんなはずはないんだけどなぁと思いながら、対象の実機で確認してみると本来はこうなるべきところがと報告と同じくえらいでかいサイズになってしまっていました。原因を探ってみたところ、どうやらxxhdpi(超高解像度)の端末で、このような現象になっている模様。0.5f);このように値を取得・計算して、最終的にピクセル単位にしてボタンを描画していました。要はこの計算が間違っていたのですが、どうやらgetDimensionはanyDensityがtrueの場合DisplayMetricsで単位変換されるということのようです。私はgetDimensionですでに単位変換されている値を、更に単位変換してしまっているので、xxhdpiの場合getDimensionでもとの3倍、それをさらに3倍しているということでした。開発2013年6月24日月曜日"間取りー図"のバージョンアップを公開しました。1.2.2を公開しました。S4等)において図形操作ボタンが大きすぎて、画面に表示しきれない問題を修正しました。対象の方々にご迷惑をおかけしましたこと、この場を借りてお詫び申し上げます。自作ライブラリ-SurfaceViewで画像の数字を表示Androidアプリ・ゲームを作るときに、スコアやパラメータなど数字を表示したい場合が結構あります。こんなときCanvas#drawText()で済めばいいんですが、見た目にこだわりたいときは画像を使う他ありません。やることは数字の画像を0から9まで用意して各桁の数字に合わせて位置を決めて描画するというだけですが、何回もでてくるので汎用的なクラスにしてしまったほうがいいかなということで作ってみました。0から9までの画像を用意。}}表示結果はこんな感じ。与えるパラメータは描画位置のtop,left,width,heightとnumber(値),digit(桁数),zerofill(0埋め)です。※四角い枠は指定した描画範囲をわかりやすいように表示してます。一度作っておけば画像を差し替えれば、いろんなパターンで利用できて捗ること間違いなしです。SurfaceViewに限らず自作Viewでも利用可能ですね。開発2013年6月19日水曜日Androidアプリでデータをファイルで保存したいAndroidアプリでデータをファイルに保存したいことがあります。ものによってはデータベースを使う方がいい場合もありますが、単体で出力したい場合に便利なのがシリアライズ。データを1つのSerializableなクラスインスタンスにまとめておけばObjectOutputStream.writeObjectで簡単にファイルにすることが出来ます。シリアライズのすごいところはそのクラスのフィールドがSerializableなクラスで構成されている場合には、出力コードを何にも書かなくていいんです。Serializableではないクラスがあったとしても、そこだけ自分で出力するかSerializableクラスに置き換えるだけでいいんです。(S)ois.readObject();ois.close();ファイルを読み込むときもObjectInputStream.readObjectで開いてキャストするだけで復元できます。開発2013年6月18日火曜日SurfaceViewでの画像のタイル描画(繰り返し)SurfaceViewを扱うとき背景のところを1枚絵で描画しているときはいいですが、小さい画像の繰り返しで済むような場合は、リソースの節約のためにもタイル(繰り返し)描画をしたほうがいいかと思います。ロジック的には下のような感じ、while分の中で描画したい大きさに達するまで位置を変えて繰り返し描くだけです。break;}最後の描画で描画領域を考慮していないのではみ出すことがありますが、それで困る場合は先日書いたSurfaceViewで描画範囲を限定するを利用するとよいでしょう。開発2013年6月17日月曜日AndroidのSerializableクラスでのtransient指定の落とし穴Androidのと付けましたがJava全般の話ですね。先日Serializableなクラスを継承したクラスの落とし穴という話を書きましたが、またしてもSerializeではまってしまいました。落とし穴というか自分が無知だっただけなんですが、Serializableクラスでフィールドへtransient指定した場合、宣言と同時に値を入れていてもデシリアライズ時には反映されません。X=400,T=0:オブジェクトを読み込みました初期値で与えているt=20が反映されていません。デシリアライズ時はコンストラクタも通りませんので気を付けましょう。開発2013年6月14日金曜日Factoryがアプリゲットでレビューされていました全然気づいていなかったんですが、なんとなく検索してみたらFactoryが5月22日にアプリゲット様で今日のおしゲー「ゲームウォッチ風単純ゲーム」という感じでレビューしていただいてました。ありがとうございました。今作っている新作アプリで1枚のSurfaceViewを上下に分けて使っているところがあって、いつも通りやってたら上の部分の描画が下の所にはみ出してしまう...上の画面では等間隔のグリッドを透視投影して描いてる(赤い部分)んですが、下のほうがはみ出してしまっています。rect)するといいようです。320);canvas.save();canvas.clipRect(clip);//描画範囲限定の描画処理canvas.restore();ソースはこんな感じ。clipRectの指定が限定したくない描画に影響しないように、clipRectする前にcanvas.save()、終わった後にcanvas.restore()するのを忘れないようにしましょう。はみ出し部分が消えています。開発2013年6月10日月曜日AndroidでSerializableなクラスを継承したクラスの落とし穴なんかよくわからんタイトルになってしまいましたが、Serializableなクラスを継承したクラスはSerializableをimplementsしなくてもSerializeすることができます。//serialVersionUIDなし、SをextendsしてるのでSerializeはできる}ところがこの継承したクラスはserialVersionUIDがないため、コンパイラが自動生成したserialVersionUIDを与えてしまうのです。なると継承クラスをちょっと変えようものなら、変更前にSerializableしたファイルはserialVersionUIDが違うためInvalidClassExceptionを起こしてしまいます。ならないために、serialVersionUIDをきちんとつける習慣をつけましょう。Serializableは拍子抜けするほど簡単にクラスをファイルに落とすことが出来て大変便利なんですが、適当に使うと大変な目にあいますね。後々の変更も検討してよく考えて使いましょう。この辺もよく読んでおくといいかも。開発2013年6月4日火曜日Factoryがアンドロイダー公認アプリに、そしてデイリーランク2位に!拙作Factoryがアンドロイダー公認アプリになりました。間取りー図は公開したのは半年以上前ですが、同アプリが4月に雑誌掲載して頂いたことといい、ツール系のアプリは息が長いのが特徴ですね。自作ライブラリ-SurfaceViewで表示するボタンSurfaceViewでボタンを使いたくなった場合、FrameLayoutあたりを使ってButtonを重ね表示して、onClickイベントで処理するということもできますが、自前でSurfaceViewに描画するButtonクラスを作っておくと、いろいろと柔軟に対応できて捗ります。対応する状態に応じた画像を準備します。Buttonクラスはこんな感じで、状態とそれに応じたImageを持っていて描画メソッドでは状態に応じて画像を描画します。}}このクラスをSparseArrayかHashMapあたりに突っ込んで、SurfaceViewのonTouchEventで座標をisPressに流してボタンのイベント処理、描画スレッドでdrawメソッドを呼んでボタンの描画処理を行います。}一度作っておけば、使いやすいよう改変したりしていろんなところで使えるので大変お勧めです。けのモバイル向け機能を完全無償化http://japan.unity3d.com/blog/press/?p=408&preview=trueUnityとはユニティ・テクノロジーズが開発している統合開発環境をもったゲームエンジンで、多様なプラットフォームに対応している。有名どころではけり姫クエストなんかにも採用されています。去年の4月ごろ期間限定の無料キャンペーンをやっていたUnityですが、この時ゲットし損ねたのを悔やんで悶々としておりました。それがついに!完全無償化とはいやはや太っ腹です。これで今までやっていなかった3Dを駆使したアプリなんかにも挑戦してみたいですね。services」が発表されました。ランキングと実績に加えてユーザー同士をマッチングする、マルチプレイの機能も用意とのこと。以前オンラインランキングを考えていて、自分でサーバーを用意するかサービスとして提供しているものを利用するか検討したことがありました。その時出てきたのは大体こんなところ。OpenFeintの代わりに使えそうなサービス一覧OpenFeintというのはモバイルゲーム向けのプラットフォームでオンラインランキングやソーシャル的な要素を組み込むためのサービス。2010年時点で1000万ユーザーを獲得していましたが、2012年末にGREEに買収されてしまいました。http://pankia.com/パンキアは目標を達成することでトロフィーを集める「アチーブメント」、スコアを投稿してランキングをつける「リーダーボード」等を提供しているプラットフォーム。ネットワーク対戦を実装するための簡単なインターフェースもあります。上記のサービス利用にはユーザーのアカウント登録が必要なのが多かったりして、結局どれもまだ利用していませんでしたが、今回Googleからこのようなサービスが出るとなれば利用しない手はないかもしれません。開発2013年5月16日木曜日SurfaceViewでの複数解像度に対応した画面設計Androidでは多様な端末が存在しており、解像度も縦横比も異なるさまざまな画面に対応しなければなりません。これに対処するには用途に応じて画面に対する比率で大きさを決める部分、縦横比を固定する部分、引き伸ばしてもいい部分というように分割して考える必要があります。拙作のFactoryではこのような分割をして画面を設計しました。画面に対して上下を55:45に分けて液晶描画とボタン描画部にとっています。上部分の液晶表示部は横を全体widthの90%としていますが、縦横比は変えたくない部分なので縦はそれに対しての77%にしています。SO-01Bなどでは以下のような実寸になります。L-06Dですが、上下分割の上の部分494pxに対して液晶表示枠の縦が768×0.9.×0.77=532pxになっていてはみ出してしまっています。L-06Dユーザーの方ごめんなさい。某コンテストに出したけど特に何もなく終わったゲームなんですが、個人的にこのゲームはなかなかゲームルールとゲームバランスの調整がよくできたと思ってます。自分で言うなという感じですが...そのままお蔵入りではもったいないので、キャラクターを変えたりして公開することにしました。よかったら遊んでみてください。公開2013年5月2日木曜日setColorとsetAlphaで半透過描画した時の落とし穴こんなのにはまるのは自分だけかもしれませんが、半透過の描画をしようとしてはまってしまったので書いておきます。描画時に透過したい場合setAlphaを使ったりしますが、このときsetColorとの組み合わせに注意しなければなりません。paint);と書いてしまうとこうなります。青い丸が透過していません。alpha)と書いてある通り透過パラメータを含んでます。255)と値が同じなので、Color.BLUEをセットすると透過なしになってしまいます。255))にするとこのように意図したとおりになります。反省会PhotoRouletteを公開してから1ヶ月あまりが経ちました。現在までのダウンロードは以下のような感じ。有効インストールは4/25時点で59、とこれは惨敗といっていい結果です...レビューサイトでの掲載は恐らくミートロイド様での1件のみ。残念でしたと言っても仕様がないので、敗因を探ってみます。アプリの成功要因を需要・品質・インパクト・流行・プロモの5つで自己評価してみました。アプリを使ってもらうためにはまず第1にGooglePlayでアプリを表示してもらうこと、次にアプリの説明、スクリーンショットを見てアプリをインストールしてもらうことの2つ関門があります。GooglePlayで表示してもらうにはPlayのランキングか検索からのいわゆる自然流入とよばれるものと、レビューサイトの紹介、ブログ、twitter、Facebook等のメディア流入、あとは純広告、リワード広告、自社広告からの広告流入などでしょうか。まとめで挙げたのを含め20サイトくらいにレビュー依頼をしました。結果は1件で、残念ながらレビューサイトに載るには需要、インパクト、プロモーションが全然足りなかったと思われます。充実した質の高いアプリの紹介、スクリーンショットや画像、紹介動画の作成など力を入れておくべきでした。そもそもアプリの出来が悪いのでは?という懸念もありますが、1ヶ月で総インストール160という数からして、アプリの出来以前にインストールもしてもらえてないということです。プロモーション不足しているところを反省点にして次に生かしたいところです。プロモーション2013年4月30日火曜日アプリのプロモーション動画の効果アプリのプロモーションの一つとしてYoutubeでの動画の公開があります。Playでも表示されるので、アプリを入れようとする人は見ることが多いと思われます。動画のプロモーション効果として説明とスクリーンショットでは伝えきれないアプリの魅力を伝えることが出来ることと、アプリの操作方法をとてもわかりやすく伝えられることがあります。アプリの魅力が伝わることはアプリのインストール数増加が見込まれるし、アプリの操作が理解されやすいことでアンインストール数を抑える効果があります。48%動画公開後アンインストール率が目に見えて減りました。このゲームが特に操作方法がわかりにくいというところもあると思いますが、それなりに効果があると思われます。プロモーション2013年4月29日月曜日PhotoRouletteがミートロイドでレビューされましたーPhotoRouletteをミートロイドでレビューしていただきましたー。Androidアプリのレビューサイトの依頼の成果がやっとでた感じです。1件目のレビューとなります!ありがたいことです。PostsAndroidのcanvasに描画したイメージを画像ファイルで保存するアプリの中でcanvasに描画したイメージを画像として保存するという機能を付けたくなることがありますが、こんな感じで簡単に出力できます。まとめAndroidアプリの作成では様々な端末への対応を考慮しなければなりません。現在どのような端末が出てるのか、調査に便利なサイトをまとめてみました。かなりの数の端末が登録されていて国や...同じ構成のレイアウトを別ファイルにしてincludeで使うたまにリストにするような不定数ではないけど、同じようなView構成が続く画面レイアウトがあります。こんなときはまず繰り返す部分のみのxmlファイルを作ります。en...setColorとsetAlphaで半透過描画した時の落とし穴こんなのにはまるのは自分だけかもしれませんが、半透過の描画をしようとしてはまってしまったので書いておきます。組み合わせに注意しなければなりません。position)となっていて文字列では選択できません。これの対応は初回はバックカメラ指定...AndroidでSerializableなクラスを継承したクラスの落とし穴なんかよくわからんタイトルになってしまいましたが、Serializableなクラスを継承したクラスはSerializableをimplementsしなくてもSerializeすることができます。不具合は、リソースのdimen.xmlでdip単位で書いてある値をSurfaceViewのボタンの大きさ指定に使っているのですが、ここで間違った計算をしているのが原因でした。内容を動的に変えようと思ったらあまり情報がなかったので書いておきます。まとめ間取りー図が5万ダウンロードを達成しましたーdimen.xmlからのdip指定によるgetDimensionの落とし穴"間取りー図"のバージョンアップを公開しました。