これがxmlのコードです:
<ImageView
Android:id="@+id/imageView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/minepic" />
ここでminepicはgifアニメーション画像ですが、アプリケーションを実行すると、静的画像が表示されます。
Androidアプリケーションで.gif画像をアニメーション化する方法についての解決策はありますか?
ここで正確かつ完全な答えを出すには、段階的に行う必要があります。
アニメーションのフレームとして機能する別の_.png
_画像が必要です。それらを_res/drawable
_フォルダーに保存します。
次の内容の_anim.xml
_フォルダに_res/drawable
_ファイルを作成します。
_<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:oneshot="false">
<item Android:drawable="@drawable/image_3" Android:duration="250" />
<item Android:drawable="@drawable/image_2" Android:duration="250" />
<item Android:drawable="@drawable/image_1" Android:duration="250" />
<item Android:drawable="@drawable/image" Android:duration="250" />
</animation-list>
_
アニメーションを表示するレイアウトxml
ファイル内:
_//...
<ImageView
Android:id="@+id/iv_animation"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:contentDescription="Animation" />
//...
_
Javaファイルで、レイアウトxmlファイルをロードしてsetContentView
を呼び出します:
_//...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView animImageView = (ImageView) findViewById(R.id.iv_animation);
animImageView.setBackgroundResource(R.drawable.anim);
animImageView.post(new Runnable() {
@Override
public void run() {
AnimationDrawable frameAnimation =
(AnimationDrawable) animImageView.getBackground();
frameAnimation.start();
}
});
// ... other code ...
}
// ...
_
アニメーションを停止するには、AnimationDrawable
で.stop()
を呼び出します。利用可能なメソッドの詳細については、 AnimationDrawable のドキュメントを参照してください。それが誰かを助けることを願っています。
Movie
またはWebView
クラスを使用することはお勧めしませんが、代わりにImageView
を使用して、ソースドローアブルをanimation-list
に設定します。例を見てください(mydrawable.xml
):
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:oneshot="false">
<item Android:drawable="@drawable/image_1" Android:duration="100" />
<item Android:drawable="@drawable/image_2" Android:duration="100" />
<item Android:drawable="@drawable/image_3" Android:duration="100" />
</animation-list>
// in your layout : <ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/my_drawable" />
明らかに、このソリューションを使用する前に、.gifを別の画像にスライスする必要があります。
私が理解している限り、あなたのGIF画像は動かないので、これはネイティブのAndroid GIFを静止画像のように扱う場合の動作です。私にとっては、最善の解決策(ホイールを再発明しないこと!)オープンソースライブラリ gitDrawable でした。READMEを確認してください。すべてが非常に単純です。gradleに依存関係を追加して(XMLまたはコードで)使用してください。Javaでの使用例:
GifDrawable gifFromResource = new GifDrawable( getResources(), R.drawable.anim );
さて、私はこの簡単なコードを使用してAndroid画像をアニメーション化することができました:
canvas.drawColor(Color.WHITE);
super.onDraw(canvas);
long now=Android.os.SystemClock.uptimeMillis();
System.out.println("now="+now);
if (moviestart == 0) { // first time
moviestart = now;
}
System.out.println("\tmoviestart="+moviestart);
int relTime = (int)((now - moviestart) % movie.duration()) ;
System.out.println("time="+relTime+"\treltime="+movie.duration());
movie.setTime(relTime);
movie.draw(canvas,this.getWidth()/2-20,this.getHeight()/2-40);
this.invalidate();
}
それはmovieviewを使用して簡単に実装されました
または、私はあなたに tutorial を与えることができます
And i think this is the one way of solution by writing the anim-space.xml
In which the slices of the image are added to the items one by one and setting that xml to the imageview of our layout xml.
http://developer.Android.com/reference/Android/graphics/drawable/AnimationDrawable.html
この開発者リンクでは、明確に定義されています。
ドローアブルの描画中にビューが変更された可能性があるため、スレッド(つまりView.post(new Runnable))を使用することはお勧めしません(1つのケースは、異なる背景画像を含むアイテムでListViewのアニメーション画像を使用しています)スレッドの実行時にImageViewの背景にアニメーションリソースではない背景がある場合、ClassCastExceptionが発生する可能性があります。
ImageView loadingImg = (ImageView)v.findViewById(R.id.image);
loadingImg.setBackgroundResource(R.drawable.progressdialog);
loadingImg.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
AnimationDrawable loadingAnimation = (AnimationDrawable) v.getBackground();
loadingAnimation.start();
}
@Override
public void onViewDetachedFromWindow(View v) {
}
});
例を示します ここ