我找到了有关如何通过从 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 导致错误。
有什么建议吗?
提前致谢
最佳答案
使用动画:
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/