電子書籍の厳選無料作品が豊富!

Androidのプログラムについてです。

パラパラ漫画のように、多数の画像を読み込んで表示させるプログラムを教えて下さい。

サンプルを見つけましたが、画像数が極端に多い場合、for文などで出来るのでしょうか。

サンプルは下記で見つけました。
http://monoist.atmarkit.co.jp/mn/articles/1205/2 …


画像の読み込みや、 画像をアニメーションのコマとして追加していく方法が記載されていますが、
画像が多い場合、for文などに変更できるのでしょうか。
(プログラム全く初心者です。)


<参考>
上記URLには以下サンプルプログラムが記載されています。

// 画像の読み込み //
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 );

// 画像をアニメーションのコマとして追加していく
anim.addFrame( frame1, 60 );
anim.addFrame( frame2, 60 );
anim.addFrame( frame3, 70 );
anim.addFrame( frame4, 80 );
anim.addFrame( frame5, 120 );
anim.addFrame( frame4, 80 );
anim.addFrame( frame3, 70 );
anim.addFrame( frame2, 60 );
anim.addFrame( frame1, 60 );


<?xml version="1.0" encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/frame1" android:duration="60" />
<item android:drawable="@drawable/frame2" android:duration="60" />
<item android:drawable="@drawable/frame3" android:duration="70" />
<item android:drawable="@drawable/frame4" android:duration="80" />
<item android:drawable="@drawable/frame5" android:duration="120" />
<item android:drawable="@drawable/frame4" android:duration="80" />
<item android:drawable="@drawable/frame3" android:duration="70" />
<item android:drawable="@drawable/frame2" android:duration="60" />
<item android:drawable="@drawable/frame1" android:duration="60" />
</animation-list>

.

A 回答 (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でエラーが表示される。

申し訳ありませんが、エラー箇所とエラーの内容を教えて下さい。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。

回答の中で、以下内容の認識合っていますでしょうか?
・XMLで記載する場合は、ソースコード上にDrawableframe = con.getResourse…は不要でシンプル。
・ただし、XMLファイル上に、画像ファイル分の定義(for文などでの簡略化不可)が必要。

イクリプスのエラーについては、再度確認してみます。

お礼日時:2013/09/18 23:51

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 );
}
    • good
    • 0
この回答へのお礼

早速の回答大変ありがとうございます。

回答について質問させていただきたいことがあります。

記載の内容ですと、
Drawableとサイズを指定するためには、画像ファイルの数だけ
sf[0] = new ScaledFrame(con.getResources().getDrawable( R.drawable.frame1 ), 60);
・・・
が必要となるのでしょうか?
たとえば1000枚ぐらいの画像があった場合、それだけでかなりの行数になってしまうのですが
仕方ないでしょうか?


あと、ECLIPSEにて上記プログラムを動作させようとしても、エラーとなってしまいます。
(プログラムを貼り付けた時点で何箇所かに✖マークが表示)
記載の内容を理解しきれておらず、今勉強中なのですが、
そのままでは使えない部分があれば教えていただけると大変助かります。

お礼日時:2013/09/16 22:51

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