Я попытался использовать следующий фрагмент кода для декодирования анимированного GIF-файла с помощью класса Movie.
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);
и нарисуйте фильм в переопределенном методе onDraw в расширенном ImageView следующим образом:
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.
Как мне сделать это правильно?
EDIT:
Я хотел бы правильно декодировать анимированный Gif на своих устройствах 2.3.x, таких как эти приложения на рынке.