2015-10-07 5 views
3

Я использую эту библиотеку, чтобы показать рисунок: 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"); 
+0

Я попробую сейчас – Khuong

+0

Хорошо, скажите, если вы его работаете. –

+0

Я не знаю, как начать чат, вы можете начать? Также вы попробовали метод, упомянутый в видео? –

0

Во-первых, вам нужно поставить вас 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(); 
    } 
} 
+0

Я уже делаю это (TRY/поймать с теми), но это показывает ошибку: java.lang.NullPointerException, ошибка с этой строкой: bytes = new byte [is.available()]; – Khuong

+0

можете ли вы отправить трассировку стека? – fixmycode

+0

Я нахожусь на своем мобильном телефоне, поэтому я бы предпочел, чтобы вы обновили свой вопрос – fixmycode

0

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

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

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

2

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

2.Fresco имеет SimpleDraweeView, как настраиваемое представление изображения, которое поддерживает Rounded Corners and Circleslink и поддерживает анимированный (GIF, .webp), а также нормальные изображения (.jpg, .png).

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

+1

Обычно я рекомендую Fresco, потому что он требует полного пересмотра проекта для правильного внедрения. Для большинства проектов Glide более чем достаточно. – wblaschko

Смежные вопросы