Я использую recyclerview с staggredGridLayoutManager в android. Проблема в том, что иногда, когда элементы прокрутки перемещаются, чтобы вписаться в экран. Обычно это не о чем беспокоиться, но в моем случае это все испортит! Так или иначе, чтобы остановить это поведение? Не только анимация. Все вещи переставляют вещи. спасибоОстановить элементы при перемещении при использовании StaggeredGridLayoutManager
8
A
ответ
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);
}
}
});
Вы пытались использовать mSGLM.setGapStrategy (StaggeredGridLay outManager.GAP_HANDLING_NONE); ? – MojoTosh
Дублированный http://stackoverflow.com/questions/27636999/staggeredgridlayoutmanager-and-moving-items – Tiago