Использование Fresco с StaggeredGridLayoutManager вызывает перемещение элементов
Я хочу сделать галерею с использованием Fresco и recyclerview.
Но когда я notifyDataSetChange()
а затем выделите верхнюю часть списка, чтобы увидеть, что элементы движутся. Вот так.
Что я пробовал:
Я пытался решить это с помощью
recyclerview.setItemAnimator(null)
а такжеholder.pic.setLayoutParams()
, Никто из них не работал.Я нашел проблему, которая похожа на мою, но я до сих пор не имею понятия о проблеме.
Вот мой ключевой код: MyAdapter
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
private List<ImageModel> mItems;
Context mContext;
private WindowManager windowManager;
private int itemWidth;
public MyRecyclerAdapter(Context context,List<ImageModel> objects,int gap) {
mContext = context;
mItems = objects;
windowManager=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
itemWidth=(windowManager.getDefaultDisplay().getWidth()-gaps*2)/2
}
static class ViewHolder extends RecyclerView.ViewHolder{
private ImageView picture;
private TextView mTextView;
private View rootView;
public ViewHolder(View itemView) {
super(itemView);
rootView = itemView;
picture =(ImageView)itemView.findViewById(R.id.image);
mTextView =(TextView)itemView.findViewById(R.id.title);
}
}
@Override
public int getItemCount() {
return mItems.size();
}
@Override
public void onBindViewHolder(ViewHolder holder, int position,Picture picture) {
holder.mTextView.setText(picture.getTitle());
ViewGroup.LayoutParams params = (ViewGroup.LayoutParams)holder.picture.getLayoutParams();
float ratio = picture.getHeight()/picture.getWidth();
int width=itemWidth;
int height=(int)(width * ratio);
params.height = height;
holder.picture.setLayoutParams(params);
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(picture.getPath()))
.setResizeOptions(new ResizeOptions(width, height))
.build();
PipelineDraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(holder.picture.getController())
.setImageRequest(request)
.build();
holder.picture.setController(controller);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int arg1) {
LayoutInflater inflater =
(LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View convertView = inflater.inflate(R.layout.item, parent, false);
return new ViewHolder(convertView);
}
}
Мой элемент макета:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
fresco:actualImageScaleType="fitXY"
fresco:placeholderImage="@mipmap/default_image"
fresco:actualImageScaleType="fitXY"
fresco:roundAsCircle="false"
fresco:roundedCornerRadius="1dp"
fresco:roundTopLeft="true"
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundingBorderWidth="2dp"
/>
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="28dp"
android:textSize="14dp"
android:textColor="#ffffff"
android:layout_below="@+id/fresco_image"
android:gravity="center"
android:background="#ffffff"/>
</RelativeLayout>
</RelativeLayout>
Вышесказанное надувается на следующее:
<android.support.v7.widget.RecyclerView
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none">
</RelativeLayout>
Я хочу получить помощь:
Почему предмет из списка переработчика всегда перемещается, когда я прокручиваю вверх или загружаю больше?
Как решить эту проблему? Можете ли вы показать мне код ключа или образец здесь?