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

无法在Android 2.3.x或更低版本上使用电影解码某些动画GIF文件,android,movie,animated-gif,Android,Movie,Animated Gif,我尝试使用下面的代码片段来解码动画gif文件和电影类 URL url; InputStream is = null; BufferedInputStream bis = null; url = new URL("http://emos.plurk.com/aeddddbbf63e980128ab7b3c1fca2798_w48_h48.gif"); HttpUR

我尝试使用下面的代码片段来解码动画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作品,但一些像这样的作品不是。 结果显示,一些帧无法解码。 这是截图:(原图:)

我用市场上的其他一些应用程序进行了测试。 他们成功地解码了动画gif。 我应该如何使它正确

编辑:
我想在我的2.3.x设备(如市场上的应用程序)上正确解码动画Gif。

您运行的是哪一版本的Android?大约在2010年9月之前,电影类对动画GIF的支持非常有限,我相信这是在第一次姜饼发布(API级别9)之后

最有可能的是,其他运行正常的应用程序都有自己的内部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);

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

我原来使用自定义gif解码器在3.0设备上运行。
下面是java示例代码:

它在我的设备v2.3.4上失败。啊,我不确定合并了哪个Android版本提交。您是否可以尝试在模拟器中运行应用程序?用“安卓-9”和“安卓-10”创建的AVD试试,看看它是否有不同的表现。无论如何,我的观点是,您可能无法可靠地使用电影类进行GIF解码。那么有更好的解决方案吗?我在3.0+设备上进行了测试和工作。但不适用于2.3.x设备。由于Android在解码Gif方面非常有限,您可以尝试在Photoshop中打开动画Gif,并使用不同的设置进行存储。至少,如果您能够将“新”gif上传到服务器上。我的猜测是,当gif保存稍微不同时,它可能能够正确播放。。。很抱歉,这个糟糕的评论:)不幸的是,我必须解码网站上的各种动画GIF文件。因此无法逐个处理。并非所有gif图像都支持使用API..:让我们在这里检查更多选项(本教程分为三个部分)。。您是如何成功地将BuffereImage帧转换为Android中的usabke格式(位图或可绘制)?@Waza_Be:您可以查看AnimationDrawable源代码。