- ベストアンサー
Androidプログラムで多数の画像を読み込んで表示させる方法
- Androidプログラムで多数の画像を読み込んで表示させる方法について解説します。
- 要素数が多い場合、for文を使用することで簡潔にプログラムを書くことができます。
- 具体的なサンプルプログラムも参考にしながら、画像の読み込みやアニメーションのコマ追加方法を紹介します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Drawable frame1 = con.getResources().getDrawable( R.drawable.frame1 ); Drawable frame2 = con.getResources().getDrawable( R.drawable.frame2 ); Drawable frame3 = con.getResources().getDrawable( R.drawable.frame3 ); Drawable frame4 = con.getResources().getDrawable( R.drawable.frame4 ); Drawable frame5 = con.getResources().getDrawable( R.drawable.frame5 ); この部分を省略していくことは困難です。 ですので、#1の回答でも毎行定義するようにプログラムを書きました。 お示しのURLにこの後紹介されている「XMLを使用したアニメーションの表示」によって表示する方がスマートです。 オブジェクトの配列は「要素ごと」に初期化をしなければNullPointerExceptionが発生します。 Object[] obj = new Object[5] for (int i; i < obj.length ; i++){ obj = new Object(); } 今回のプログラムの場合、初期化の引数に R.drawable.frame1 などのパラメータが必要で、その都度指定しなければなりません。これは、仮に画像が1000枚になっても同じです。なので上記で示した「XMLを使用したアニメーションの表示」の方がスマートだと考えます。表示させるデータはXMLに定義し、アニメーションの再生のみJavaでプログラムできるからです。 >Eclipseでエラーが表示される。 申し訳ありませんが、エラー箇所とエラーの内容を教えて下さい。
その他の回答 (1)
- hirotn
- ベストアンサー率59% (147/246)
forを使うとこのようなイメージです。 class ScaledFrame{ Drawable frame; int size; public ScaledFrame(Drawable d, int s){ //コンストラクタ frame = d; size = s; } } ScaledFrame[] sf = new ScaledFrame[5]; sf[0] = new ScaledFrame(con.getResources().getDrawable( R.drawable.frame1 ), 60); //コンストラクタを呼びます Drawableとサイズを指定します。 sf[1] = new ScaledFrame(con.getResources().getDrawable( R.drawable.frame2 ), 60); sf[2] = new ScaledFrame(con.getResources().getDrawable( R.drawable.frame3 ), 70); sf[3] = new ScaledFrame(con.getResources().getDrawable( R.drawable.frame4 ), 80); sf[4] = new ScaledFrame(con.getResources().getDrawable( R.drawable.frame5 ), 120); for (int i = 0 ; i < sf.length ; i++){ //0,1,2,3,4の順にループ anim.addFrame( sf[i].frame, sf[i].size ); //上記コンストラクタで指定したDrawableとサイズを呼び出します。 } for (int i = sf.length-1 ; i <= 0 ; i--){ //4,3,2,1,0の順にループ anim.addFrame( sf[i].frame, sf[i].size ); }
お礼
早速の回答大変ありがとうございます。 回答について質問させていただきたいことがあります。 記載の内容ですと、 Drawableとサイズを指定するためには、画像ファイルの数だけ sf[0] = new ScaledFrame(con.getResources().getDrawable( R.drawable.frame1 ), 60); ・・・ が必要となるのでしょうか? たとえば1000枚ぐらいの画像があった場合、それだけでかなりの行数になってしまうのですが 仕方ないでしょうか? あと、ECLIPSEにて上記プログラムを動作させようとしても、エラーとなってしまいます。 (プログラムを貼り付けた時点で何箇所かに✖マークが表示) 記載の内容を理解しきれておらず、今勉強中なのですが、 そのままでは使えない部分があれば教えていただけると大変助かります。
お礼
回答頂きありがとうございます。 回答の中で、以下内容の認識合っていますでしょうか? ・XMLで記載する場合は、ソースコード上にDrawableframe = con.getResourse…は不要でシンプル。 ・ただし、XMLファイル上に、画像ファイル分の定義(for文などでの簡略化不可)が必要。 イクリプスのエラーについては、再度確認してみます。