2017-02-14 26 views
2

Мне нужно скачать изображение из Интернета, и для этого я использую Glide.Я получаю разный размер изображений, используя Glide в Recycler View StaggeredGridLayout

После загрузки изображения они появляются в Recycler. Часть изображений выглядит красиво и заполнить все ячейки, как этот

enter image description here

Но некоторые изображения в противном случае выполнить странное поведение и выглядит как этот

enter image description here

Насколько я понимаю, такой результат из-за Поляне работает асинхронно, и до момента, когда создание ячейки в адаптере Glade не имеет изображения, а адаптер создает размер по умолчанию для ячейки ... и только после того, как в то время появилась поляна с изображением, но ячейка уже создана с неправильным размером.

Но как это исправить?

мне нужен адаптер подождать, пока поляны закончить с загрузкой и не создавать ячейки для Recycler View

Мой XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:paddingBottom="4dp" 
android:paddingEnd="8dp" 
android:paddingStart="8dp" 
android:paddingTop="4dp" 
> 

<android.support.v7.widget.CardView 
    android:id="@+id/cvInbox" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:cardCornerRadius="5dp" 
    app:cardElevation="15dp" 
    > 

<com.balysv.materialripple.MaterialRippleLayout 
    android:id="@+id/rippleInbox" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/standard_white" 
    app:mrl_rippleColor="@color/ntz_background_light_grey" 
    app:mrl_rippleOverlay="true" 
    > 

    <LinearLayout 
     android:id="@+id/cardMainActivityLinearLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     > 

    <ImageView 
     android:id="@+id/imageViewMainCard" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:background="@color/standard_white" 
     android:orientation="vertical" 
     android:layout_below="@+id/imageViewMainCard" 
     > 

     <TextView 
      android:id="@+id/tvBrandName" 
      android:text="custom brand" 
      android:textColor="@color/black_color" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      /> 

     <TextView 
      android:id="@+id/tvItemName" 
      android:text="custom Type" 
      android:textColor="@color/black_color" 
      android:layout_below="@+id/tvBrandName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      /> 

     <TextView 
      android:id="@+id/tvPrice" 
      android:text="custom price" 
      android:textColor="@color/black_color" 
      android:layout_below="@+id/tvItemName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      /> 

     <Button 
      android:id="@+id/bAction" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="button" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentEnd="true" 

      /> 

    </RelativeLayout> 
    </LinearLayout> 
</com.balysv.materialripple.MaterialRippleLayout> 
</android.support.v7.widget.CardView> 
</LinearLayout> 

Glide адаптер

ImageView iv = currentView.ivMainCard; 
     String url = currentCard.getImageUrl(); 

     Glide.with(context) 
       .load(url) 
       .placeholder(R.drawable.progress_animation) 
       .crossFade() 
       .into(iv); 
+0

это скольжение или поляна. Я думаю, что это скольжение ??? –

+0

, пожалуйста, поделитесь кодом файла item.xml recycler и кодом установки изображения сглаживания в представлении –

+0

@PrashanthDebbadwar извините за опечатку. Вы правы –

ответ

0

В bindViewHolder вашего ресайклера View вам необходимо добавить в макет ImageView (0,0,0,0) со всеми нулевыми параметрами. В вашем случае код ниже

 ImageView iv = currentView.ivMainCard; 
     iv.layout(0,0,0,0); 

     String url = currentCard.getImageUrl(); 

     Glide.with(context) 
       .load(url) 
       .placeholder(R.drawable.progress_animation) 
       .crossFade() 
       .into(iv); 
0

в моем случай я только что изменил lib от Glide до Picasso

теперь мой запрос выглядит следующим образом

Picasso.with(context) 
       .load(url) 
       .placeholder(R.drawable.progress_animation) 
       .error(R.drawable.image_error_404) 
       .into(iv); 

и все нормально

+0

@ Aleskey. Вы также позже нашли способ заставить его работать с Glide, потому что я сталкиваюсь та же проблема – user3701188

+0

@ user3701188, в конце концов я использую Пикассо. Если это возможно, попробуйте изменить Glade на Piccasso в своем проекте, то есть –

+0

Я нашел исправление. Вам нужно добавить к себе изображение: «imageview.layout (0,0,0,0)» – user3701188

 Смежные вопросы

  • Нет связанных вопросов^_^