2017-07-26 87 views
0

我正在使用Glide庫將gif文件加載到我的應用程序中。這裏我實現了:GIF在某些gif圖片上播放較慢

GlideDrawableImageViewTarget imageViewPreview = new GlideDrawableImageViewTarget(gifSplach); 
    Glide.with(this) 
      .load("http://i.imgur.com/Cpw2pk6.gif") 
      .listener(new RequestListener<String, GlideDrawable>() { 
       @Override 
       public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 


        return false; 
       } 

       @Override 
       public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 

        //Toast.makeText(activity, ""+e.getMessage(), Toast.LENGTH_SHORT).show(); 

        return false; 
       } 
      }) 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 

      .into(imageViewPreview); 

但由於某些原因gif文件加載非常慢的幀。我試圖谷歌,但我無法弄清楚。我使用的Glide版本3.7.0

+0

也許是因爲它下載速度慢?嘗試預先下載它並將其放入資產中,然後從資產中播放它 –

+1

我的.gif內存大小爲5 MB,即使從資產/原始文件夾中獲取也很慢。 –

+0

您的'.gif'大小爲5.2 MB,這可能是慢幀速率背後的原因 –

回答

0

你不需要任何庫,只需使用此代碼: 步驟1

public class GifView extends View { 
public Movie mMovie; 
    public long movieStart; 
private int gifId; 

public GifView(Context context) { 
super(context); 
} 

    public GifView(Context context, AttributeSet attrs) { 
super(context, attrs); 

initializeView(attrs.getAttributeResourceValue 
("http://schemas.android.com/apk/r 
    es-auto", "src", 0)); 
} 

    public GifView(Context context, AttributeSet attrs, int defStyle) { 
super(context, attrs, defStyle); 


initializeView(attrs.getAttributeResourceValue(
"http://schemas.android.com/apk/ 
    res-auto", "src", 0)); 
} 

private void initializeView(final int id) { 
InputStream is = getContext().getResources().openRawResource(id); 
mMovie = Movie.decodeStream(is); 
this.gifId = id; 
} 

    @Override 
    protected void onDraw(Canvas canvas) { 
    canvas.drawColor(Color.TRANSPARENT); 
    super.onDraw(canvas); 
    long now = android.os.SystemClock.uptimeMillis(); 

    if (movieStart == 0) { 
    movieStart = now; 
    } 

if (mMovie != null) { 
    int relTime = (int) ((now - movieStart) % mMovie.duration()); 
    mMovie.setTime(relTime); 
    mMovie.draw(canvas, getWidth() - mMovie.width(), getHeight() - 
    mMovie.height()); 
    this.invalidate(); 
    } 
    } 

     public void setGIFResource(int resId) { 
    this.gifId = resId; 
    initializeView(this.gifId); 
    } 

    public int getGIFResource() { 
    return this.gifId; 
    } 
    } 

第2步:添加以下在res/ATTRS線.XML

<declare-styleable name="GIFView"> 
<attr name="src" format="reference" /> 
</declare-styleable> 

3步:添加此行的AndroidManifest.xml比活性

android:hardwareAccelerated="false" 

第4步:建立在XML這樣的觀點:

<com.thigale.testproject.GifView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
components:src="@drawable/loading" /> 

步驟5在你創建的視圖的父活動,加上下面幾行:

xmlns:components="http://schemas.android.com/apk/res-auto" 
0

我減小了.gif的大小並從drawable中加載它。它會爲我工作。

GlideDrawableImageViewTarget imageViewPreview = new GlideDrawableImageViewTarget(gifSplach); 
Glide.with(this) 
     .load(R.drawable.gif_splash) 
     .listener(new RequestListener<String, GlideDrawable>() { 
      @Override 
      public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 


       return false; 
      } 

      @Override 
      public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 

       //Toast.makeText(activity, ""+e.getMessage(), Toast.LENGTH_SHORT).show(); 

       return false; 
      } 
     }) 
     .diskCacheStrategy(DiskCacheStrategy.ALL) 

     .into(imageViewPreview); 
+0

好兄弟它的幀速率取決於它的大小 – Ahmad