Показывать gif / анимированные изображения с сервера отдыха в Android - PullRequest
2 голосов
/ 10 сентября 2011

В моем приложении я хотел бы показать некоторые анимации при запуске в некоторых специальных мероприятиях, таких как Хэллоуин, День Благодарения, Рождество и т. Д.

Я не нашел горячего отображения анимированного GIF-файла в представлении. Самое близкое решение, которое я нашел, - сделать AnimationDrawable с помощью GIF-кадров.

Я пытаюсь реализовать это, но у меня есть несколько вопросов о том, как хранить (в настоящее время я использую сервер LAMP), передавать и восстанавливать ресурсы, необходимые с сервера, на устройство Android.

  1. Загрузка данных .gif в телефон и программное извлечение кадров и частоты кадров - это хорошее решение или это добавит ненужную нагрузку на клиента? Если это присвоено, есть ли какая-нибудь библиотека или источник, чтобы вести меня с этой задачей?

  2. Если я хочу обработать gif на сервере, а затем я хочу передать его клиенту покадрово, как я могу это сделать? Я подумал о создании JSON с URL-адресами изображений и загрузке их, но, возможно, это не очень хороший вариант, поскольку мне понадобится много http-подключений, и загрузка может быть медленнее, если задержка в сети велика

  3. Где я могу найти внутреннюю структуру gif? Я искал в Google, но ничего не нашел

Заранее спасибо

Ответы [ 4 ]

3 голосов
/ 10 сентября 2011
Downloading the .gif data to the phone and extract there the frames and framerate 
programmatically is a nice solution or it will add an unnecessary load to the client?
If its appropriated is there some library or source for guiding me in with that task?

Если вы хотите извлечь GIF-файл, чтобы получить кадры и частоту кадров, вам необходим GIF-декодер, а затем применить их к AnimationDrawable , это поможет вам добавить схемы схематически.

эти две ссылки могут помочь вам извлечь изображение GIF в Android

http://www.basic4ppc.com/android/help/gifdecoder.html

http://code.google.com/p/loon-simple/source/browse/trunk/android/LGame-Android-0.2.6S/org/loon/framework/android/game/core/GIFDecoder.java?r=7

1 голос
/ 10 сентября 2011

Определенно сделайте это на стороне клиента. Вы видели это ? Разделение анимации на несколько изображений и рендеринг ее на стороне клиента с помощью AnimationDrawable может быть единственным способом.

0 голосов
/ 03 февраля 2013

ImageViewEx может отображать GIF из сети.Надеюсь, это поможет.

0 голосов
/ 02 ноября 2012

Вам потребуется расширить представление, чтобы оно могло воспроизводиться .gif Рассмотрите следующий код

private class GifView extends View{

Movie movie;
InputStream in=null;
long moviestart;
Url url

public GifView(Context context,String downloadUrl) {
super(context);
this.url=new Url(downloadUrl);
URLConnection con = url.openConnection();



in=con.getInputStream()
movie=Movie.decodeStream(in);

}

@Override
protected void onDraw(Canvas canvas) {

canvas.drawColor(Color.WHITE);
super.onDraw(canvas);
long now=android.os.SystemClock.uptimeMillis();
Log.v("tag","now="+now);
if (moviestart == 0) { // first time
moviestart = now;

}
Log.v("tag","\tmoviestart="+moviestart);
int relTime = (int)((now - moviestart) % movie.duration()) ;
Log.v("tag""time="+relTime+"\treltime="+movie.duration());
movie.setTime(relTime);
movie.draw(canvas,this.getWidth()/2-20,this.getHeight()/2-40);
this.invalidate();
}
}

Используйте это представление в своем XML-файле и укажите URL-адрес. Если присутствует задержка в сети, загрузите изображение вотдельный поток и подача входного потока в конструктор

Измените его на

public GifView(Context context,InputStream in) {
    super(context);

    movie=Movie.decodeStream(in);

    }
...