Общий эскиз решения заключается в использовании трудоустроить пользовательский вид, который всасывает спрашивает фильм, чтобы периодически рисовать себя на холсте.
Первый шаг - создание экземпляра фильма. Существует фабрика называется decodeStream, которая может сделать фильм с учетом InputStream, но недостаточно использовать поток из UrlConnection. Если вы попробуете это, вы получите IOException, когда загрузчик фильма попытается вызвать сброс в потоке. Хэком, к сожалению, является использование отдельного BufferedInputStream с меткой, заданной вручную, чтобы сообщить ему, чтобы сохранить достаточно данных, сброс которых не завершится. К счастью, URLConnection может рассказать нам, сколько данных ожидать. Я говорю, что этот взлом неудачен, потому что он эффективно требует, чтобы весь образ буферизировался в памяти (что не представляет проблемы для настольных приложений, но это серьезная проблема на мобильном устройстве с ограниченным объемом памяти).
Вот надрез кода настройки фильма:
URL url = new URL(gifSource);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bis.mark(conn.getContentLength());
Movie movie = Movie.decodeStream(bis);
bis.close();
Далее, вам нужно создать представление, которое будет отображать этот фильм. Подкласс View с пользовательским onDraw выполнит трюк (если у него есть доступ к Movie, который вы создали с предыдущим кодом).
@Override protected void onDraw(Canvas canvas) {
if(movie != null) {
long now = android.os.SystemClock.uptimeMillis();
int dur = Math.max(movie.duration(), 1); // is it really animated?
int pos = (int)(now % dur);
movie.setTime(pos);
movie.draw(canvas, x, y);
}
}
мнение не будет вызывать себя перерисовывать без помощи и слепо вызова недействительными() в конце OnDraw это просто энергия отходов. В другом потоке (возможно, тот, который вы использовали для загрузки данных изображения) вы можете публиковать сообщения в основном потоке, прося, чтобы представление было недействительным с устойчивым (но не безумным) темпом.
Handler handler = new Handler();
new Thread() {
@Override public void run() {
// ... setup the movie (using the code from above)
// ... create and display the custom view, passing the movie
while(!Thread.currentThread().isInterrupted()) {
handler.post(new Runnable() {
public void run(){
view.invalidate();
}
});
try {
Thread.sleep(50); // yields 20 fps
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}.start();
надеюсь, что это поможет вам понять
http://stackoverflow.com/questions/3660209/display-animated-gif –
http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html – Naufal
Если вы сделали R & D, тогда вы могли бы его найти. http://gayashan-a.blogspot.in/2012/02/android-how-to-display-gif-image-in.html, http://android-er.blogspot.in/2014/03/load- animated-gif-from-internet.html, http://androidsurya.blogspot.in/2014/03/how-to-load-animated-.gif-from-internet-programmatically-in-android-example-howtoto -show-gif-images-in-android.html – Piyush