安卓-从文件中播放动态gif图

3
我发现了一些关于如何在Android中播放动画gif的教程,其中包括从资源文件或使用drawable对象读取。但是我想要的是从SD卡中读取gif文件。 我已经对读取来自assets的gif的项目进行了一些更改。
在主活动中,我基本上创建了gifMovieView,然后设置内容(gifMovieView)。 在GifMovieView类的构造函数中,我像“eu.andlabs.tutorial.animatedgifs”项目中那样初始化了Movie对象。但是,我使用的是decodeFile方法,给出文件路径,而不是获取inputStream的decodeStream方法。
    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
1个回答

5

使用动画:

1 - 在 链接 中提取您的 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();

点击这里查看相关信息。


谢谢。我也在Android开发者Google群组中找到了另一个答案。 - Beyza
4
为什么不在这里发表另一个答案呢?只需发布链接即可。这将有助于其他人。 - user445338

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接