android - 在 Android 2.3.x 或更低版本上使用 Movie 无法解码某些动画 GIF 文件

标签 android movie animated-gif

我尝试使用以下代码 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/

相关文章:

android - AOSP 阻止安装来自未知来源的应用程序

android - 如何告诉 OkHttpClient 忽略缓存并从服务器强制刷新?

objective-c - 在数据库中保存从图库中选择的照片的路径

facebook - 如何使用 ffmpeg 为 Facebook 生成循环动画 gif

java - 在 JLabel 怪异中加载动画 GIF

android - Gradle无法刷新Android Studio

android - 实现 Google Play 结算库版本 2

movie - Imdb 上所有电影名称、 Actor 、导演、编剧的列表

mysql - SQL 数据库电影票

javascript - 用JS控制GIF动画。播放、停止、倒放