アプリ版:「スタンプのみでお礼する」機能のリリースについて

【Flash馬鹿のJava】連番画像ファイルの読込について

対象バージョン:J2SE1.6 / Android1.6

はじめましてFlash馬鹿です。Java初心者です。
連番画像ファイルを一気に読み込みたいのですが、方法が分かりません。

Flashでいうところの
for(i=1;i<100;i++){
this["loadmc" + i].loadMovie("image" + i + "png")
}
みたいなことがしたいです。

private Bitmap image1;
private Bitmap image2;
private Bitmap image3;
image1 = BitmapFactory.decodeResource(r, R.drawable.image1);
image2 = BitmapFactory.decodeResource(r, R.drawable.image2);
image3 = BitmapFactory.decodeResource(r, R.drawable.image3);

だといけますが

private ArrayList<Bitmap> image;
image.add(BitmapFactory.decodeResource(r, R.drawable.image1));
image.add(BitmapFactory.decodeResource(r, R.drawable.image2));
image.add(BitmapFactory.decodeResource(r, R.drawable.image3));

にするとAndroid1.6のシミュレータが落ちます。
また、連番の画像リソースを指定する方法("image" + i + "png")も分かりませんので
教えていただけると幸いです。

よろしくお願いします。

A 回答 (1件)

まず、Javaでは、オブジェクトを入れる変数には、その実体ではなく、実体への参照になっている、ということに注意してください。



> private Bitmap image1;
ではimage1という「矢印」が作られるだけ、その先は何も示していません(正確には、nullを示していますが)

> image1 = BitmapFactory.decodeResource(r, R.drawable.image1);
ここで、BitmapFactory~て作られたオブジェクトとimage1の矢印が結びつきます。

同様に
> private ArrayList<Bitmap> image;
もimageという矢印が出来るだけです。 ArrayListは存在していません。
その状態で
>image.add(BitmapFactory.decodeResource(r, R.drawable.image1));
とやっても、存在しないArrayListにaddなどできないので、エラーになります。実際には例外が発生し、それが捕捉されないままでシミュレータの終了まで行ってしまうのでしょう。

ArrayListの使用例を参考書等で確認すれば、new でArrayListのインスタンスを作成しているのがわかると思います。
private ArrayList<Bitmap> image = new ArrayList<Bitmap> () ;

> 連番の画像リソースを指定する方法("image" + i + ".png")
Action Script等では、「数値」と「数字の入った文字列」の区別が曖昧で、上のように使うこともできますが、Javaなどでは、明確に区別しているので、上のようなことをする場合には、「数値」を「数字の入った文字列」に明示的に変換する必要があります。
例えば、こんな風に
"image" + Integer.toString(i) + ".png"


一気にやろうとしないで、面倒でも、基礎からやったほうがいいと思います。
他の言語の知識は、時に学習の邪魔になります。
    • good
    • 0
この回答へのお礼

非常に丁寧なご説明ありがとうございます。
なんとなく意味がわかってきたような気がします。

private List<Bitmap> image;
image = new ArrayList<Bitmap>();
image.add(BitmapFactory.decodeResource(r, R.drawable.image01));
image.add(BitmapFactory.decodeResource(r, R.drawable.image02));
image.add(BitmapFactory.decodeResource(r, R.drawable.image03));

とすることで意味もわからずなんとなく動いていたのですが、ひとまずListとArrayListで宣言したときの違いから調べてみます・・・というかもっと基礎からやるべきなんでしょうけど・・・

このたびは初歩的な質問にも関わらずお答えいただき、ありがとうございました。

お礼日時:2010/06/19 10:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!