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

OSCHINA-MIRROR/way-WayGif

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

##WayGif Android-приложение использует JNI для анализа и отображения GIF-изображений, что повышает эффективность и скорость работы. Исходный проект взят с GitHub: :blush: 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 (должен поддерживать маркировку)
InputStream sourceIs = . . . ;
BufferedInputStream bis = new BufferedInputStream(sourceIs, GIF_LENGTH);
GifDrawable gifFromStream = new GifDrawable(bis);
//прямой 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](http://developer.android.com/reference/android/widget/MediaPlayerControl.html)
Стандартные средства управления для MediaPlayer (как в [VideoView](http://developer.android.com/reference/android/widget/VideoView.html)) могут быть использованы для управления анимацией GIF и отображения текущего прогресса.
Просто установите `GifDrawable` как MediaPlayer на вашем [MediaController](http://developer.android.com/reference/android/widget/MediaController.html) следующим образом:
```java
 @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-изображения более эффективно и быстро. Развернуть Свернуть
C и 3 других языков
Отмена

Обновления

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

Участники

все

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

Загрузить больше
Больше нет результатов для загрузки
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