我尝试使用以下代码段代码来解码带有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,就像市场上那些应用程序一样。
答案 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