Android において、静的にリソース名を指定せずに、動的にリソースIDを取得したいことが時々あります。
ある範囲のリソースが欲しいなど、一定の規則でリソース名が決まっている場合は以下の方法でリソースが取れます。
1 2 3 4 5 6 7 |
|
全てのリソースが欲しい場合は Reflection でなんとかなります。
例えば Strings に定義されたリソースを全て取得したい場合は、以下で取得可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Android において、静的にリソース名を指定せずに、動的にリソースIDを取得したいことが時々あります。
ある範囲のリソースが欲しいなど、一定の規則でリソース名が決まっている場合は以下の方法でリソースが取れます。
1 2 3 4 5 6 7 |
|
全てのリソースが欲しい場合は Reflection でなんとかなります。
例えば Strings に定義されたリソースを全て取得したい場合は、以下で取得可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
ついにねんがんの Google Glass をてにいれたぞ!(今更)
ざっと触ってみたところで、使用感などのレビューをしてみます。
9-Patch でコンテンツ領域を指定することはよくあるけれど、実は NinePatchDrawable を Background とした View のサイズを変更しても、コンテンツ領域(というか Padding) はうまい感じに伸縮してくれない。
たとえば次のような 9-Patch の画像を用意してコンパイル、NinePatchDrawable として読み込んだ場合を考える。
vim キーバインドじゃないとなにもやる気が起きないので、 Xcode 5.1 に XVim を導入します。
1
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
XVim.xcodeproj
をロード.xvimrc
を設置~/.vimrc
の代わりに ~/.xvimrc
が適用されるAndroid で Resources から getDrawable() などして画像をとった場合、一体それはいつどんなタイミングでメモリに読み込まれているのか? キャッシュはされているのか?
いい加減把握しておきたかったので、これも調べました。
API 17(4.2.2_r1)で見た結果なので、他のバージョンのSDKでも同様かはわかりませんが、多分同じ感じだと思います。
タッチジェスチャを検出する場合は、 GestureDetector に次のようなリスナを渡して判定するのが常套手段ですが、onScroll() や onFling() の第一引数の e1 にはジェスチャの開始地点の MotionEvent が入ります。
ところが、時々 e1 に null が渡ってくることがあって困りました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
ググるといくつか stackoverflow が見つかったけど、どれも根本解決には至っていない様子。
というわけで、原因を調べてみました。
結論を先に言うと、 ACTION_DOWN のタッチイベント(MotionEvent)を GestureDetector#onTouchEvent() に渡せていないのが原因でした。
フレームワークに組み込まれた標準のアニメーションなど、Android のデフォルトのリソースを調べるときは、この辺りを見ると便利。
Android で外部ファイルを保存する場合、どこに何を保存すれば良いのか?それぞれの違いは何なのか?
内蔵メモリなのか?SDカードなのか?
いい加減しっかり把握しておきたいと思ったので、まとめてみました。
Android で View のキャプチャ画像を取得する方法を二種類紹介します。
どちらも UI スレッド以外のスレッドから呼び出し可能でした。
View の描画のためのキャッシュを利用する方法。
1 2 3 4 5 6 |
|
描画キャッシュが有効になっているかどうかや、最新のキャッシュが存在するかどうかは状況によるので、自分で設定してやることで View のキャプチャを取得することができます。
自分で用意した Canvas に View を描画する方法。
1 2 3 4 5 6 7 |
|
View のサイズで作った Bitmap を Canvas の書き込み先にし、draw() メソッドで書き込んでやることで、 View が描画された Bitmap を取得することができます。
今までなんとなく使っていたけれど、View のキャプチャに buildDrawingCache() を必ず呼ぶようにしているスニペットがあったり、 getDrawingCache() で null が返ってくることがあったりと挙動を不審に思っていたので軽く調査(Android 4.2.2)。
Android でライブラリを使用する際、プロジェクトを作成する必要のあるライブラリプロジェクトと、クラスライブラリの JAR と2種類存在するけれど、それぞれどう違うのか軽く調べました。
最も根本的な違いは Resources を内包しているかどうかのようです。
ライブラリプロジェクトは Resources を保持できるので、 JAR のように静的に APK に組み込むことができません。
そのためプロジェクトとして作成した上で、組み込みたいプロジェクトに依存させて、ビルド時に R.java を一緒に作成する必要があります。
完全に上記参考サイトの受け売りですが、Android APK のビルドの流れも要点だけ追っておきます。 (これを以前追っておいたおかげで、 Gradle のビルドで詰まったときなどにとても役立ちました)
もっと詳しく理解する場合は、リンク先をご確認下さい。
1 2 3 4 5 6 |
|
1 2 |
|