開発中のAndroidアプリを左右フリックで3画面に増やす対応をしています。
やる前から大変なことになりそう・・・と思ってましたが、予想どおりで誠に遺憾です。
1.UI部品の対応
2.データベースの対応
3.背景画像の対応
の3つが必要で1、2は比較的すんなりいけたのですが、3でハマってます。
大ハマリです。
背景画像には大きく分けて
・3画面で別々の背景画像
・一つの画像を3画面に拡大
という2種類の設定が可能になるのですが、皆さんお気づきかもしれませんがOutOfMemoryとの戦いです。
拡大するということはデカいBitmapが必要になっちゃうわけなのです。
ちょっとでもメモリを節約するために
Bitmap.rexycle()
は当たり前として、
BitmapFactory.decodeStream
での読み込み時分割なども鋭意対応中です。
ちょっと話がずれますがこのBitmapFactory.decodeStreamでもちょっとだけハマりました。
読み込み時に画像のサイズを変更するために仮読み込みをするのですが、
options.inJustDecodeBounds = true; //仮読み込み設定
Bitmap bitmap = BitmapFactory.decodeStream(in, null, options);
~~~~~~~~~~ うんちゃらかんちゃら ~~~~~~~~~~~~
options.inJustDecodeBounds = false; //本読み込み
bitmap = BitmapFactory.decodeStream(in, rect, options);
とやったら、見事に読み込めませんでした。
最後に帰ってくるBitmapがnullなんです。
きれいサッパリnullなんです。
答えは、仮読み込みでInputStreamのファイルディスクリプタが末尾まで行っちゃってるから・・・
一旦closeして開きなおすといけました。
普段、同じファイルを繰り返し読む処理をほとんど書いたことがないのでウカーリしていました。