0

Я использую Glide для загрузки URL-адреса в ImageView. Моя основная проблема заключается в том, что при прокрутке это похоже на то, что размер изображений становится испорченным, что вызывает некоторые искажения. Мой соответствующий код приведен ниже.Почему мой ImageView в RecyclerView иногда меняет размер при прокрутке назад (используя Glide)?

XML (только часть, относящаяся к ImageView):

<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"> 

     <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:

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


    @Override 
    public int getItemCount() { 
     return items.size(); 
    } 


    class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     ImageView itemImage; 


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

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


     void bind(int listIndex) { 
      Glide.with(context) 
        .load(items.get(listIndex).getImageUrl()) 
        .placeholder(R.drawable.placeholder_flyer_item_image) 
        .diskCacheStrategy(DiskCacheStrategy.ALL) 
        .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) 
        .into(itemImage); 

     } 
    } 
} 
+0

попробуйте удалить .placeholder (R.drawable.placeholder_flyer_item_image) и .override (Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) Это может сработать. – Eswar

ответ

2

У меня была такая же проблема, изображения иногда был изменен до заполнителя размер, который был совсем другой и изображения выглядел как растянутый, поэтому, если ваши образы имеют разные пропорции, то заполнитель просто удаляет местозаполнитель или меняет его, чтобы он соответствовал тем же размерам, что и изображения, но заполнитель лучше всего работает, если изображения имеют одинаковые пропорции, альтернативным решением для заполнителя является установка backg round в элементе родительского представления, чтобы избежать этой проблемы и иметь некоторый фон загрузки.

Я также вижу, что у вас есть wrap_content по свойствам размера ImageView, я бы предложил установить некоторую ширину и высоту, а затем скольжение может легко регулировать изображения до уровня обрезки или подгонки.