3

アセットから読み取るか、描画可能なオブジェクトを使用して、Android でアニメーション GIF を再生する方法に関するチュートリアルを見つけました。しかし、私が欲しいのは、sdcard から gif ファイルを読み取ることです。アセットから gif を読み取るプロジェクトを少し変更しました。

メイン アクティビティでは、基本的に gifMovieView を作成してから setContent(gifMovieView) を作成します。GifMovieView クラスのコンストラクタで、プロジェクト「eu.andlabs.tutorial.animatedgifs」のように Movie オブジェクトを初期化しました。しかし、decodeStream が inputStream を取得する代わりに、decodeFile を使用してファイル パスを指定しました。

    File file = new File (Environment.getExternalStorageDirectory().getAbsolutePath(),"piggy.gif");

    if(file.exists()){

           mMovie = Movie.decodeFile(file.getPath()); 
   }

この行には I/O EXCEPTION を指定しました。ファイルは見つかりますが、decodeFile で例外が発生します。

onDraw で;

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.TRANSPARENT);
    super.onDraw(canvas);
    final long now = SystemClock.uptimeMillis();

    if (mMoviestart == 0) { 
        mMoviestart = now;
    }


    Log.i("",""+mMovie.duration());

    Log.i("",""+mMoviestart);

    final int relTime = (int)((now - mMoviestart) % mMovie.duration());
    mMovie.setTime(relTime);
    mMovie.draw(canvas, 10, 10);
    this.invalidate();
}

例外のため、movie.duration が 0 になり、エラーが発生します。

助言がありますか?

前もって感謝します

https://gist.github.com/beyzakokcan/5488897/raw/e9c2afbf941d06ed0f1d3b75dc3d100ff9d7ee85/GifMovieView.java

4

1 に答える 1

5

アニメーションを使用する:

1 - Linkでgif を抽出し、drawable フォルダーに画像を保存します

2 - drawable フォルダーに image_background_animation.xml を作成します。ここで、「img_weel」は gif から抽出された画像です。

<?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/img_weel_1"
        android:duration="100"/>
    <item
        android:drawable="@drawable/img_weel_2"
        android:duration="100"/>
    <item
        android:drawable="@drawable/img_weel_3"
        android:duration="100"/>

</animation-list>

3 - Java コード:

ImageView imgWheel = (ImageView) findViewById(R.id.img_wheel);
imgWheel.setBackgroundResource(R.drawable.image_background_animation);

AnimationDrawable frameAnimation = (AnimationDrawable) imgWheel.getBackground();
frameAnimation.start();

4 - アニメーションの時間を確定したい場合:

new CountDownTimer(3000, 100) {
 void onFinish() {
    frameAnimation.stop();
  }
}.start();

ここを見て

于 2013-04-30T14:32:05.567 に答える