我尝试使用以下代码 fragment 通过 Movie 类解码动画 gif 文件。
URL url;
InputStream is = null;
BufferedInputStream bis = null;
url = new URL("http://emos.plurk.com/aeddddbbf63e980128ab7b3c1fca2798_w48_h48.gif");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
is = httpURLConnection.getInputStream();
bis = new BufferedInputStream(is);
byte[] array = streamToBytes(bis);
mGifMovie = Movie.decodeByteArray(array, 0, array.length);
并在扩展的 ImageView 中重写 onDraw 方法中绘制电影,如下所示:
if (mGifMovie != null) {
long now = android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0) { // first time
mMovieStart = now;
}
if (mGifMovie != null) {
int dur = mGifMovie.duration();
if (dur == 0) {
dur = 1000;
}
int relTime = (int) ((now - mMovieStart) % dur);
mGifMovie.setTime(relTime);
mGifMovie.draw(canvas, 0, 0);
invalidate();
}
}
有些 gif 动画可以用,但像这个这样的其他一些则不行。 结果有些帧无法解码。 这是屏幕截图:/image/le4bC.png (原图:http://emos.plurk.com/aeddddbbf63e980128ab7b3c1fca2798_w48_h48.gif)
我测试了市场上的其他一些应用程序。 他们成功解码了 gif 动画。 我该如何使其正确?
编辑: 我想在我的 2.3.x 设备上正确解码动画 Gif,就像市场上的那些应用程序一样。
最佳答案
您运行的 Android 版本是什么?之前 Movie 类中对动画 GIF 的支持相当有限 this commit is merged into the AOSP code大约在 2010 年 9 月,我相信这是在第一个 Gingerbread 版本(API 级别 9)之后。
很可能其他可用的应用程序有自己的内部 GIF 解码代码,并且没有使用 Movie 类。
更新:我继续在 android-10 (GB MR2) 和 android-14 (ICS) 模拟器上测试了代码。在 android-10 模拟器上,图像仍然无法正确解码,但在 android-14 模拟器上工作正常。
关于android - 在 Android 2.3.x 或更低版本上使用 Movie 无法解码某些动画 GIF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088865/