无法在Android 2.3.x或更低版本上使用电影解码某些动画GIF文件
我尝试使用下面的代码片段来解码动画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
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源代码。