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

时间:2011-11-11 02:05:55

标签: android movie animated-gif

我尝试使用以下代码段代码来解码带有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方法中绘制Movie,如下所示:

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可以使用,但有些像这样的人不是。 它出来了一些帧无法解码。 以下是屏幕截图:http://i.imgur.com/HsxcP.png(原始图片:http://emos.plurk.com/aeddddbbf63e980128ab7b3c1fca2798_w48_h48.gif

我测试了市场上的其他一些应用程序。 他们成功解码了动画gif。 我该如何纠正?

编辑: 我想在我的2.3.x设备上正确解码动画Gif,就像市场上那些应用程序一样。

2 个答案:

答案 0 :(得分:3)

您运行的是什么版本的Android?在2010年9月左右this commit is merged into the AOSP code之前,电影课中对动画GIF的支持非常有限,我相信这是在第一次发布姜饼(API级别9)之后。

其他有效的应用程序很可能都有自己的内部GIF解码代码而且没有使用Movie类。

更新:我继续在android-10(GB MR2)和android-14(ICS)的模拟器上测试代码。在android-10模拟器上,图像仍然未正确解码,但在android-14模拟器上工作正常。

答案 1 :(得分:0)

我最终使用自定义gif解码器在3.0设备下运行。 以下是java示例代码:http://www.java2s.com/Code/Java/2D-Graphics-GUI/DecodesaGIFfileintooneormoreframes.htm