Android- 从文件中播放 gif 动画

标签 android gif

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

在主要 Activity 中,我基本上创建 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

最佳答案

使用动画:

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

here

关于Android- 从文件中播放 gif 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302051/

相关文章:

java - 如何使用 greenDAO 截断表

java - 用 Java 编写 GIF 文件

javascript - 如何压缩一系列PNG以供加载?

php - 上传 GIF 的安全方法

java - 如何在 android java 中解析 android studio 中巨大的 JSON 文件

android - 在后台运行 Activity

android - DayDream 中的 VideoView 和 MediaController?

android - 如何将 repo 同步输出重定向到文件中

gif - 如何从一堆 jpg 中创建 gif 动画