こんにちは。
画像をランダムで背景表示させてるのですが、
ときどきResources#getDrawable()で「高さ-1,幅-1」の画像が返ってきます。
画像は5枚で、そのうちの特定の1枚だけが、たまに、取得できない状態です。
エラーは出ないのですが、背景がなくなり、レイアウトが崩れて表示されます。
--------------------------------
LayoutInflater inf = this.getLayoutInflater(); // レイアウトインフレーターから取得
View view = inf.inflate(R.layout.sample, null);
FrameLayout layout = (FrameLayout) view.findViewById(R.id.sampleLayout);; // 変更する背景レイアウト
// String random; // ランダムな文字列(a,b,c,d,eのいずれか)が入ってます
int resid = getResources().getIdentifier("sample_" + random, "drawable", getPackageName()); // リソースID取得
layout.setBackgroundResource(resid); // 背景を設定
Drawable d = getResources().getDrawable(resid);
Log.d("sample", "drawable width:" + d.getIntrinsicWidth() +
" height:" + d.getIntrinsicHeight()); // ★なぜか{-1,-1}の画像が返ってくることが
// ...このあと既存レイアウトにlayoutをaddView()
--------------------------------
・リソース名が間違ってる?
>ログは正常。そもそもNotFoundExceptionが出るはず。
・画像が大きすぎる?正常じゃない?
>8KBほどの80px*80px(24bit)の普通のPNG画像です。
ループで-1,-1が返らないまで回したりもしたんですが、無限ループにはまりました。。
(遅延させればいいんでしょうか……しかしなぜ正常に返ってこないかがわかりません)
起こらない方が多く、10回中1回くらい(もっと少ないくらい)の割合で、アプリを再起動すれば直ったり、直らなかったり……といった感じです。
何か原因、対策、疑うべきポイント、ささいな点でもいいのでアドバイスいただけたら嬉しいです。
以上、よろしくお願いいたします。
--------------------------------
アプリケーションはルーレットのようなもので、大量のTextViewをパネルにし、
スタートボタンでHandlerを回し、パネルをランダムに選び、ストップボタンでHandlerを止め、
その結果により上記プログラムで画像を変えています。