Отображение Gif изображения с библиотекой

Я использую эту библиотеку для отображения gif-изображения: https://github.com/felipecsl/GifImageView

Но я не знаю, как реализовать мой gif-образ в этом коде. У меня есть папка с папками GifImages.

Вот мой код:

PlayActivity.java:

import android.app.Activity;
import android.os.Bundle;

import com.felipecsl.gifimageview.library.GifImageView;

import java.io.IOException;
import java.io.InputStream;

public class PlayActivity extends Activity{

    GifImageView gifView;
    //byte[] bytes;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_play_activity);

        try {
            InputStream is = getAssets().open("rain_4.gif");
            byte[] bytes = new byte[is.available()];
            is.read(bytes);
            is.close();

            gifView = (GifImageView) findViewById(R.id.gifImageView);
            gifView = new GifImageView(this);
            gifView.setBytes(bytes);
            gifView.startAnimation();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        if(gifView != null) gifView.startAnimation();
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(gifView != null) gifView.startAnimation();
    }
}

И layout_play_activity.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".PlayActivity">

    <com.felipecsl.gifimageview.library.GifImageView
        android:id="@+id/gifImageView"
        android:layout_gravity="center"
        android:scaleType="fitCenter"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

Ответ 1

В приведенной ниже библиотечной ссылке был образец. Ваш способ загрузки GifImageView отличается от способа записи в образце. Образец загружал gif из Интернета.

Вот фрагмент из MainActivity образца:

GifImageView gifImageView = (GifImageView) findViewById(R.id.gifImageView);

new GifDataDownloader() {
    @Override
    protected void onPostExecute(final byte[] bytes) {
        gifImageView.setBytes(bytes);
        gifImageView.startAnimation();
        Log.d(TAG, "GIF width is " + gifImageView.getGifWidth());
        Log.d(TAG, "GIF height is " + gifImageView.getGifHeight());
    }
}.execute("http://gifs.joelglovier.com/aha/aha.gif");

Решение:

Я не уверен, что вы можете загрузить GifImageView из своих активов в эту библиотеку, но я предпочитаю использовать ионную библиотеку. Это действительно хорошо и просто. С помощью этой библиотеки вы также можете растянуть gif-изображения по своему усмотрению:

https://github.com/koush/ion

Простой пример:

ImageView imageView = (ImageView) findViewById(R.id.imageView);
Ion.with(imageView).load("http://gifs.joelglovier.com/aha/aha.gif");

Ответ 2

1. Я бы предложил вам проверить Библиотека управления изображениями на Facebook, которая Fresco, которая довольно потрясающий и зрелый по сравнению с другими библиотеками Загрузка изображений.

2.Fresco имеет SimpleDraweeView как пользовательское изображение, которое поддерживает Rounded Corners and Circles ссылка и поддерживает Animated (.gif,. webp), а также Normal Images (.jpg,.png).

3.Fresco обрабатывает все кеширование изображений с 3-уровневой архитектурой (BITMAP_MEMORY_CACHE, ENCODED_MEMORY_CACHE и DISK_CACHE). Это также уменьшает проблемы OOM (вне памяти). Когда изображение в представлении выходит из экрана, оно автоматически перерабатывает растровое изображение, следовательно, освобождая память.

Ответ 3

Во-первых, вам нужно поместить gif в папку с ресурсами. Папка активов не создается по умолчанию в проектах Android Studio, поэтому вы должны создать каталог в src/main/assets и поместить в него файлы .gif. Папка с выделенными ресурсами должна быть зарезервирована для чертежей.

Вы можете использовать входной поток для загрузки байтов в ваш массив байтов, это делается внутри вашего метода onCreate:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_play_activity);
    try {
        //animation.gif is just an example, use the name of your file
        //that is inside the assets folder.

        InputStream is = getAssets().open("animation.gif");
        bytes = new byte[is.available()];
        is.read(bytes);
        is.close();

        gifView = (GifImageView) findViewById(R.id.gifImageView);
        gifView = new GifImageView(this);
        gifView.setBytes(bytes);
        gifView.startAnimation();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Ответ 4

Я бы предложил заглянуть в Glide library, так как он делает анимированные GIF без каких-либо изменений и может вписаться в любой проект.

Он также имеет дополнительное преимущество более плавной загрузки и правильного изменения размера, если вы используете эти изображения в любом виде переработанного вида.


Как сказал @fixmycode, вы никогда не определяете байты [], если хотите использовать свою текущую реализацию.