2016-10-16 56 views
1

目前我使用此下載,在我recyclerview顯示圖像:有效地下載和使用圖像recyclerview

@Override 
public void onBindViewHolder(ItemViewHolder item, int i) { 
    try { 
     item.title.setText(aushangdata.getJSONObject(i).getString("title")); 
     item.desc.setText(aushangdata.getJSONObject(i).getString("text")); 
     item.tag.setText(aushangdata.getJSONObject(i).getString("category")); 
     item.link.setText(aushangdata.getJSONObject(i).getString("link")); 
     URL myUrl = new URL(aushangdata.getJSONObject(i).getString("image")); 
     RetrieveImageTask task = new RetrieveImageTask(); 
     Drawable drawable = task.execute(myUrl).get(); 
     item.thumb.setImageDrawable(drawable); 
    } catch (JSONException | IOException | InterruptedException | ExecutionException e) { 
     e.printStackTrace(); 
    } 
} 

private class RetrieveImageTask extends AsyncTask<URL,Void,Drawable>{ 
    URL url; 
    InputStream inputStream; 
    protected Drawable doInBackground(URL... urls){ 
     url = urls[0]; 
     try { 
      inputStream = (InputStream)url.getContent(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return Drawable.createFromStream(inputStream, null); 
    } 
    protected void onPostExecute(Drawable drawable) { 

    } 
} 

然後我在我的RecyclerViewAdapter使用這個類在onBindViewHolder

這顯然是一個非常糟糕的解決方案,它非常明顯:當我打開包含recyclerview的片段時,我的延遲時間高達0.5秒,而當我向下滾動時,它也滯後,因爲圖像佔用很多卡片上的空間。

我的問題是:什麼是在RecyclerView下載和顯示圖像的最佳方式?

回答

1

我和畢加索有類似的問題。上面的答案是正確的。您可能會考慮的其他事項:我所做的改進加載時間的方法是使用方法resizecenterCrop

resize(xxx,xxx). 

centerCrop(). 
into(IMAGEVIEW); 

滑行可能有類似的方法。

+0

嘗試使用Glide。有更好的表現。 – elmontoya7