1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/way-WayGif

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

WayGif

Android-приложение с помощью jni анализирует и отображает gif-изображения, что обеспечивает более высокую эффективность и скорость.

Исходный проект доступен на GitHub: android-gif-drawable.

Простое использование

  • В файле макета XML: Используйте GifImageView (или GifImageButton) аналогично использованию обычного ImageView:
<com.way.gif.GifImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/src_anim"
    android:background="@drawable/bg_anim"/>

Если android:src или android:background используют GIF-файл, программа автоматически воспроизведёт его после запуска. GifTextView позволяет использовать GIF-файлы в качестве фона:

<com.way.gif.GifTextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:drawableTop="@drawable/left_anim"
    android:drawableStart="@drawable/left_anim"
    android:background="@drawable/bg_anim"/>
  • В Java-коде: GifImageView, GifImageButton и GifTextView могут напрямую вызывать setImageResource(int resId) и setBackgroundResource(int resId), чтобы установить изображение GIF-файла. GifDrawable также можно создать непосредственно в коде:
//asset file
GifDrawable gifFromAssets = new GifDrawable(getAssets(), "anim.gif");

//resource (drawable or raw)
GifDrawable gifFromResource = new GifDrawable( getResources(), R.drawable.anim );

//byte array
byte[] rawGifBytes = ...
GifDrawable gifFromBytes = new GifDrawable(rawGifBytes);

//FileDescriptor
FileDescriptor fd = new RandomAccessFile("/path/anim.gif", "r").getFD();
GifDrawable gifFromFd = new GifDrawable(fd);

//file path
GifDrawable gifFromPath = new GifDrawable("/path/anim.gif");

//file
File gifFile = new File(getFilesDir(),"anim.gif");
GifDrawable gifFromFile = new GifDrawable(gifFile);

//AssetFileDescriptor
AssetFileDescriptor afd = getAssets().openFd("anim.gif");
GifDrawable gifFromAfd = new GifDrawable(afd);

//InputStream (it must support marking)
InputStream sourceIs = ...
BufferedInputStream bis = new BufferedInputStream(sourceIs, GIF_LENGTH);
GifDrawable gifFromStream = new GifDrawable(bis);

//direct ByteBuffer
ByteBuffer rawGifBytes = ...
GifDrawable gifFromBytes = new GifDrawable(rawGifBytes);

InputStreams автоматически закрываются в GifDrawable после использования, поэтому нет необходимости закрывать их вручную. Однако вы можете вызвать recycle().

Обратите внимание, что все источники ввода должны иметь возможность перемотки к началу. Это необходимо для правильного воспроизведения анимированных GIF-файлов (где анимация повторяется), поскольку последующие кадры декодируются по запросу из источника.

####Управление анимацией GifDrawable реализует Animatable и MediaPlayerControl, так что вы можете использовать его методы и многое другое:

  • stop() — останавливает анимацию, может быть вызван из любого потока;
  • start() — запускает анимацию, может быть вызван из любого потока;
  • isRunning() — возвращает, работает ли анимация в данный момент;
  • reset() — перематывает анимацию назад, не перезапускает остановленную;
  • setSpeed(float factor) — устанавливает новый коэффициент скорости анимации, например, передача 2.0f удвоит скорость анимации;
  • seekTo(int position) — ищет анимацию (в пределах текущего цикла) до заданной позиции (в миллисекундах), поддерживается только поиск вперёд;
  • getDuration() — возвращает длительность одного цикла анимации;
  • getCurrentPosition() — возвращает прошедшее время с начала текущего цикла анимации.

#####Использование MediaPlayerControl Стандартные элементы управления для MediaPlayer (например, в VideoView) можно использовать для управления GIF-анимацией и отображения её текущего прогресса. Просто установите GifDrawable как MediaPlayer на свой MediaController, например:

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GifImageButton gib = new
``` ```
GifImageButton(this);
setContentView(gib);
gib.setImageResource(R.drawable.sample);
final MediaController mc = new MediaController(this);
mc.setMediaPlayer((GifDrawable) gib.getDrawable());
mc.setAnchorView(gib);

gib.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        mc.show();
    }
});

Получение метаданных GIF

  • getLoopCount() — возвращает количество циклов, как определено в расширении NETSCAPE 2.0.
  • getNumberOfFrames() — возвращает число кадров (не менее 1).
  • getComment() — возвращает текст комментария (null, если у GIF нет комментария).
  • getFrameByteCount() — возвращает минимальное количество байтов, которое можно использовать для хранения пикселей одного кадра.
  • getAllocationByteCount() — возвращает размер (в байтах) выделенной памяти, используемой для хранения пикселей данного GifDrawable.
  • getInputSourceByteCount() — возвращает длину (в байтах) исходных данных.
  • toString() — возвращает информацию о размере изображения и количестве кадров в удобочитаемом виде (предназначено для отладки).

Дополнительно

Скриншот теста

Скриншот 1

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Android-приложение с помощью JNI анализирует и отображает GIF-изображения более эффективно и быстро. Расширить Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/way-WayGif.git
git@gitlife.ru:oschina-mirror/way-WayGif.git
oschina-mirror
way-WayGif
way-WayGif
master