Использование Fresco с StaggeredGridLayoutManager вызывает перемещение элементов

Вот вопросы по github

Я хочу сделать галерею с использованием 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>

Я хочу получить помощь:

  1. Почему предмет из списка переработчика всегда перемещается, когда я прокручиваю вверх или загружаю больше?

  2. Как решить эту проблему? Можете ли вы показать мне код ключа или образец здесь?

0 ответов

Другие вопросы по тегам