2015-02-15 2 views
8

Я использую recyclerview с staggredGridLayoutManager в android. Проблема в том, что иногда, когда элементы прокрутки перемещаются, чтобы вписаться в экран. Обычно это не о чем беспокоиться, но в моем случае это все испортит! Так или иначе, чтобы остановить это поведение? Не только анимация. Все вещи переставляют вещи. спасибоОстановить элементы при перемещении при использовании StaggeredGridLayoutManager

+0

Вы пытались использовать mSGLM.setGapStrategy (StaggeredGridLay outManager.GAP_HANDLING_NONE); ? – MojoTosh

+0

Дублированный http://stackoverflow.com/questions/27636999/staggeredgridlayoutmanager-and-moving-items – Tiago

ответ

1

Если вы используете Пикассо, то сначала создайте пользовательский ImageView

public class DynamicHeightImageView extends ImageView { 

private double mHeightRatio; 

public DynamicHeightImageView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public DynamicHeightImageView(Context context) { 
    super(context); 
} 

//Here we will set the aspect ratio 
public void setHeightRatio(double ratio) { 
    if (ratio != mHeightRatio) { 
     mHeightRatio = ratio; 
     requestLayout(); 
    } 
} 

public double getHeightRatio() { 
    return mHeightRatio; 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    if (mHeightRatio > 0.0) { 
     // set the image views size 
     int width = MeasureSpec.getSize(widthMeasureSpec); 
     int height = (int) (width * mHeightRatio); 
     setMeasuredDimension(width, height); 
    } else { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 


} 

Затем в onBindViewHolder

Picasso.with(context).load(modal.image.mediumUrl).into(holder.profileImage, new Callback() { 
      @Override 
      public void onSuccess() { 
       holder.profileImage.setHeightRatio(holder.profileImage.getHeight()/holder.profileImage.getWidth()); 
      } 

      @Override 
      public void onError() { 

      } 
     }); 
+0

Большое вам спасибо, у меня была такая же проблема с использованием Glide. –

2

Использование ImageView предложенного в ответ Рэнди вы можете сделать то же самое с Glide :

Glide.with(context) 
      .load(imageURL) 
      .asBitmap() 
      .dontAnimate() 
      .fitCenter() 
      .diskCacheStrategy(DiskCacheStrategy.RESULT) 
      .into(new SimpleTarget<Bitmap>() { 
       @Override 
       public void onResourceReady(Bitmap bitmap, GlideAnimation anim) { 

        if (bitmap != null) 
        { 
         holder.image.setHeightRatio(bitmap.getHeight()/bitmap.getWidth()); 
         holder.image.setImageBitmap(bitmap); 
        } 
       } 
      });