2017-01-12 40 views
0

當我快速瀏覽我的RecyclerView時,我注意到圖像實際加載到ImageView(使用Glide)之前,出現空白的ImageView。如果圖像不能成功載入,我寧願只顯示一個空的ImageView容器。我不想讓空的ImageView顯示,除非它包含已加載的圖像。在圖像加載之前看到下面的空ImageView出現在視覺上並不令人愉快,即使它在默認淡入之前只有幾毫秒從開始滑行:爲什麼我的ImageView在圖像加載之前出現(使用Glide)?

Empty ImageView that I don't want to see

XML(irrelvant代碼移除)

<LinearLayout 
     android:id="@+id/image_holder_layout" 
     android:layout_width="85dp" 
     android:layout_height="85dp" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="8dp" 
     android:layout_marginStart="8dp" 
     android:gravity="center" 
     android:visibility="invisible"> 

     <ImageView 
      android:id="@+id/flyer_item_image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true" 
      android:background="@android:drawable/dialog_holo_light_frame" /> 
    </LinearLayout> 

RecyclerAdapter.java

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ItemHolder> { 

    private ArrayList<Item> items; 
    Context context; 


    public RecyclerAdapter(Context context, ArrayList<Item> items) { 
     this.items = items; 
     this.context = context; 
    } 


    @Override 
    public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     Context context = viewGroup.getContext(); 
     boolean shouldAttachToParentImmediately = false; 

     View view = LayoutInflater.from(context).inflate(R.layout.list_row_flyer, viewGroup, shouldAttachToParentImmediately); 
     ItemHolder viewHolder = new ItemHolder(view); 

     return viewHolder; 
    } 


    @Override 
    public void onBindViewHolder(ItemHolder holder, int position) { 
     holder.bind(position); 
    } 


    class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     LinearLayout itemImageLinearLayout; 
     ImageView itemImage; 


     public ItemHolder(View view) { 
      super(view); 

      itemImageLinearLayout = (LinearLayout) view.findViewById(R.id.image_holder_layout); 
      this.itemImage = (ImageView) view.findViewById(R.id.flyer_item_image); 
     } 


     void bind(int listIndex) { 
      Glide.with(context) 
        .load(items.get(listIndex).getImageUrl()) 
        .diskCacheStrategy(DiskCacheStrategy.ALL) 
        .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) 
        .into(itemImage); 
      itemImageLinearLayout.setVisibility(View.VISIBLE); 
     } 
    } 
} 

澄清:滑翔淡入動畫對我來說不是必需的。如果解決方案更容易,沒有淡入,我可以。

+0

在加載真實圖像之前,滑翔始終顯示空白圖像。沒有辦法避免它。除非你使用另一個庫。 – TOP

+0

我從來沒有見過這個黑色圖像:S –

+0

您可能想要緩存請求,以便下一次不會執行另一個請求,而是使用前一個請求的響應,並在用戶第二次看到圖像時阻止空白屏幕。 – HaroldSer

回答

1

嘗試任何下面的選項

  1. 卸下:機器人:背景= 「@機器人:可拉伸/ dialog_holo_light_frame」 從ImageView的

  2. 嘗試添加佔位符ImageView的。這將加載實際圖像前添加默認圖像

Glide.with(本) .load(URL) .placeholder(R.drawable.placeholder) .into(ImageView的);

相關問題