WayGif
Android-приложение с помощью jni анализирует и отображает gif-изображения, что обеспечивает более высокую эффективность и скорость.
Исходный проект доступен на GitHub: android-gif-drawable.
Простое использование
<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"/>
//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, так что вы можете использовать его методы и многое другое:
#####Использование 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();
}
});
getLoopCount()
— возвращает количество циклов, как определено в расширении NETSCAPE 2.0
.getNumberOfFrames()
— возвращает число кадров (не менее 1).getComment()
— возвращает текст комментария (null
, если у GIF нет комментария).getFrameByteCount()
— возвращает минимальное количество байтов, которое можно использовать для хранения пикселей одного кадра.getAllocationByteCount()
— возвращает размер (в байтах) выделенной памяти, используемой для хранения пикселей данного GifDrawable.getInputSourceByteCount()
— возвращает длину (в байтах) исходных данных.toString()
— возвращает информацию о размере изображения и количестве кадров в удобочитаемом виде (предназначено для отладки).Скриншот 1
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )