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

OSCHINA-MIRROR/way-WayGif

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

WayGif

Android-приложение использует JNI для анализа и отображения GIF-изображений более эффективно и быстро. Исходный проект взят с GitHub: :blush: android-gif-drawable

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

В layout-файле XML:

Как обычный ImageView используется GifImageView (или GifImageButton):

<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-коде:

Методы setImageResource(int resId) и setBackgroundResource(int resId) могут использоваться для установки GIF-изображений в GifImageView, GifImageButton и GifTextView.

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);

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

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

Управление анимацией

GifDrawable реализует интерфейсы Animatable и MediaPlayerControl, позволяющие использовать следующие методы:

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

Стандартные средства управления медиа (как в 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() — возвращает число кадров (не менее одного)
  • getComment() — возвращает текстовое сообщение (null если GIF не имеет комментария)
  • getFrameByteCount() — возвращает минимальное количество байтов, необходимых для хранения пикселей одного кадра
  • getAllocationByteCount() — возвращает размер (в байтах) выделенной памяти, используемой для хранения пикселей данного GifDrawable
  • getInputSourceByteCount() — возвращает длину (в байтах) исходных данных
  • toString() — возвращает человекочтебельную информацию о размере изображения и количестве кадров (предназначена для целей отладки)

Расширенные возможности

Тестовые скриншоты

Скриншот 1

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

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

Введение

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

Обновления

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

Участники

все

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

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