2015-02-15 21 views
8

Sto usando recyclerview con staggredGridLayoutManager in Android. Il problema è che a volte quando gli elementi in movimento si spostano per adattarsi allo schermo. Normalmente non è nulla di cui preoccuparsi, ma nel mio caso rovina tutto! Quindi c'è comunque modo di fermare questo comportamento? Non solo l'animazione. Gli oggetti interi che riordinano le cose. grazieInterrompe gli elementi di spostarsi quando si utilizza StaggeredGridLayoutManager

+0

hai provato a usare mSGLM.setGapStrategy (StaggeredGridLay outManager.GAP_HANDLING_NONE); ? – MojoTosh

+0

Duplicato di http://stackoverflow.com/questions/27636999/staggeredgridlayoutmanager-and-moving-items – Tiago

risposta

1

Se si utilizza Picasso poi Innanzitutto creare un ImageView personalizzato

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


} 

Poi, nel tuo 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

Grazie mille, ho avuto lo stesso problema con Glide. –

2

Utilizzando l'ImageView suggerito nella risposta di Randy si può fare lo stesso con 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); 
        } 
       } 
      }); 
Problemi correlati