3

我找到了有关如何通过从资产中读取动画或使用可绘制对象在 android 中播放动画 gif 的教程。但我想要的是从 sdcard 读取 gif 文件。我已经稍微改变了从资产中读取 gif 的项目。

在主要活动中,我基本上创建了 gifMovieView 然后 setContent(gifMovieView) 在 GifMovieView 类的构造函数中,我已经像项目“eu.andlabs.tutorial.animatedgifs”一样初始化了 Movie 对象。但我使用 decodeFile 提供文件路径而不是 decodeStream 获取 inputStream。

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

    if(file.exists()){

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

我有这条线的 I/O 例外。它找到了文件,但 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 - 在链接中提取您的 gif并将图像保存在可绘制文件夹中

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 回答