RecyclerView:错误的滚动效果(Android)

Posted

技术标签:

【中文标题】RecyclerView:错误的滚动效果(Android)【英文标题】:RecyclerView: buggy scroll effect (Android) 【发布时间】:2021-12-29 16:56:07 【问题描述】:

这是我在 *** 上的第一篇文章。我对水平的androidx.recyclerview.widget.RecyclerView 有疑问:滚动效果确实有问题。我正在使用自定义适配器,但我认为这不是问题所在。我也在使用毕加索的图像。

RecyclerView
<androidx.recyclerview.widget.RecyclerView
    android:layout_
    android:layout_
    android:id="@+id/test2"
    android:paddingTop="10dp"
    android:nestedScrollingEnabled="false"
    android:clipToPadding="false"
    android:clipChildren="false"
    android:overScrollMode="never"
    tools:ignore="MissingConstraints"/>
MainFilmsListAdapter.java(我的适配器):
public class MainFilmsListAdapter extends RecyclerView.Adapter<MainFilmsListAdapter.MyViewHolder> 
    private List<MainFilms> filmsList;
    class MyViewHolder extends RecyclerView.ViewHolder 
        TextView mainFilmsTitle, mainFilmsURL;
        ImageView mainFilmsImage;
        MyViewHolder(View view) 
            super(view);
            mainFilmsTitle = view.findViewById(R.id.main_films_item_title);
            mainFilmsURL = view.findViewById(R.id.main_films_item_url);
            mainFilmsImage = view.findViewById(R.id.main_films_item_image);
        
    
    public MainFilmsListAdapter(List<MainFilms> filmsList) 
        this.filmsList = filmsList;
    
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.main_films_item, parent, false);
        return new MyViewHolder(itemView);
    
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) 

        MainFilms film = filmsList.get(position);
        holder.mainFilmsTitle.setText(film.getMainFilmsTitle());
        holder.mainFilmsURL.setText(film.getMainFilmsURL());
        Picasso.get()
                .load(filmsList.get(position).getMainFilmsImage())
                .fit()
                .centerCrop()
                .into(holder.mainFilmsImage);

    
    @Override
    public int getItemCount() 
        return filmsList.size();
    

MainFilms.java
public class MainFilms 
    String mainFilmsTitle;
    String mainFilmsImage;
    String mainFilmsURL;

    public MainFilms(String mainFilmsTitle, String mainFilmsURL, String mainFilmsImage) 
        this.mainFilmsTitle = mainFilmsTitle;
        this.mainFilmsURL = mainFilmsURL;
        this.mainFilmsImage = mainFilmsImage;
    

    public String getMainFilmsTitle() 
        return mainFilmsTitle;
    

    public String getMainFilmsURL() 
        return mainFilmsURL;
    

    public String getMainFilmsImage() 
        return mainFilmsImage;
    

MainActivity.java(RecyclerView):
mAdapter = new MainFilmsListAdapter(filmsList);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
结果: https://i.imgur.com/64CPQDY.mp4(由于文件大小,我无法上传,很抱歉质量不好,但我的电脑很慢)

我无法弄清楚问题出在哪里,我一直在寻找解决方案超过 5 个小时。我只注意到视图在到达 RecyclerView 中的某个项目时冻结。我还在我的 Android 手机上测试了该应用程序。 RecyclerView 中的item 数量是恒定的。

【问题讨论】:

我认为问题在于图像加载。试试这个 - ***.com/questions/26856487/… 谢谢,这解决了我的问题。您可以将其发布为答案吗? 【参考方案1】:

看起来图片加载有问题。

您可以尝试阅读此相关问题和答案 - Recyclerview painfully slow to load cached images form Picasso

【讨论】:

以上是关于RecyclerView:错误的滚动效果(Android)的主要内容,如果未能解决你的问题,请参考以下文章

移除 RecyclerView 滚动效果

在带有 RecyclerView 的 NestedScrollView 中无法正确显示过度滚动效果

仿微信未读RecyclerView平滑滚动定位效果

Recyclerview cardview Onclick滚动时出现重复效果

Android-RecyclerView系列 RecyclerView实现Item居中效果

在RecyclerView列表滚动的时候显示或者隐藏Toolbar