まとめ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月に雑誌掲載して頂いたことといい、ツール系のアプリは息が長いのが特徴ですね。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の落とし穴"間取りー図"のバージョンアップを公開しました。