2017-01-12 12 views
0

RecyclerViewをすばやくスクロールすると、画像が実際にGlideを使用して読み込まれる前に空のImageViewが表示されていることがわかります。イメージが正常に読み込まれない場合、空のImageViewコンテナ以外のものは表示されません。空のImageViewが表示されないようにしたい。デフォルトのフェードインの前に数ミリ秒間であっても、画像がロードされる前に次の空のImageViewが表示されるのは視覚的に気に入らないグライドから始まる:Glideを使用して画像が読み込まれる前にImageViewが表示されるのはなぜですか?

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); 
     } 
    } 
} 

明確にするために:グライドフェードインアニメーションは私には必要ではありません。ソリューションがフェードインなしで簡単であれば、私はそれで大丈夫です。 ImageViewのためのプレースホルダを追加しようとImageViewの

から
  • を: "描画可能/ dialog_holo_light_frameアンドロイド@":アンドロイド:背景=

  • +0

    グライドは、実画像をロードする前に常に空白の画像を表示します。それを避ける方法はありません。別のライブラリを使用していない限り。 – TOP

    +0

    私はこの黒いイメージを見たことがありません。S –

    +0

    次回は別のリクエストをしないで前のリクエストからのレスポンスを使用し、ユーザーがイメージを2度目に見ると空白の画面が表示されないようにリクエストをキャッシュします。 – HaroldSer

    答えて

    1

    は、以下のいずれかのオプション

    1. 削除してみてください。これは、実際の画像をロードする前に、デフォルトの画像が追加されます

    Glide.with(この) .LOAD(URL) .placeholder(R.drawable.placeholder) .into(ImageViewの);

    関連する問題