android – RecyclerView滞后滚动

android – RecyclerView滞后滚动,第1张

概述我在RecyclerView中加载400×200的图像,但滚动在2k设备上是滞后的.我正在使用毕加索从资源加载图像. 正如您在演示中可以看到的图像在2k屏幕上模糊,但如果我加载更高分辨率的图像,情况变得更糟. 如何解决这个问题,我甚至没有加载大图像,它的400×200? Demo 这是我的代码 Card_view.xml <?xml version="1.0" encoding="utf-8"?> 我在RecyclerVIEw中加载400×200的图像,但滚动在2k设备上是滞后的.我正在使用毕加索从资源加载图像.

正如您在演示中可以看到的图像在2k屏幕上模糊,但如果我加载更高分辨率的图像,情况变得更糟.
如何解决这个问题,我甚至没有加载大图像,它的400×200?

Demo

这是我的代码
Card_vIEw.xml

<?xml version="1.0" enCoding="utf-8"?><androID.support.v7.Widget.CardVIEw    xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:card_vIEw="http://schemas.androID.com/apk/res-auto"    androID:ID="@+ID/card_vIEw"    card_vIEw:cardPreventCornerOverlap="false"    androID:layout_wIDth="fill_parent"    androID:layout_height="wrap_content"    androID:layout_margin="8dp"    card_vIEw:cardCornerRadius="2dp"    >    <linearLayout        androID:layout_wIDth="fill_parent"        androID:layout_height="wrap_content"        androID:orIEntation="vertical"        androID:ID="@+ID/rel"        >        <ImageVIEw            androID:ID="@+ID/cardimage"            androID:layout_wIDth="match_parent"            androID:layout_height="wrap_content"            androID:scaleType="fitXY"            androID:src="@drawable/p7"            />        <TextVIEw            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="Title"            androID:paddingleft="16dp"            androID:paddingRight="16dp"            androID:paddingtop="16dp"            androID:paddingBottom="24dp"            androID:textStyle="bold"            androID:textSize="24sp"            androID:ID="@+ID/cardTitle"            androID:layout_gravity="center_vertical"            />    </linearLayout></androID.support.v7.Widget.CardVIEw>

Myadapter代码

public class CardAdapter extends RecyclerVIEw.Adapter<CardAdapter.VIEwHolder> {private Context mContext;List<Flower> List = new ArrayList<>();public CardAdapter(Context mContext,List<Flower> List) {    this.mContext = mContext;    this.List = List;}@OverrIDepublic VIEwHolder onCreateVIEwHolder(VIEwGroup parent,int vIEwType)   {    VIEw itemVIEw = LayoutInflater.from(parent.getContext())            .inflate(R.layout.card_vIEw,parent,false);    return new VIEwHolder(itemVIEw);}@OverrIDepublic voID onBindVIEwHolder(VIEwHolder holder,int position)  {    holder.Flower=getItem(position);    holder.cardTitle.setText(List.get(position).name);    Picasso.with(mContext)            .load(List.get(position).ID)            .placeholder(R.drawable.ic_launcher)            .into(holder.cardimage);}@OverrIDepublic voID onAttachedToRecyclerVIEw(RecyclerVIEw recyclerVIEw) {    super.onAttachedToRecyclerVIEw(recyclerVIEw);}@OverrIDepublic int getItemCount() {    return List.size();}public Flower getItem(int i) {    return List.get(i);}public class VIEwHolder extends RecyclerVIEw.VIEwHolder {    ImageVIEw cardimage;    TextVIEw cardTitle;    Flower Flower;    public VIEwHolder(VIEw itemVIEw) {        super(itemVIEw);        cardimage = (ImageVIEw) itemVIEw.findVIEwByID(R.ID.cardimage);        cardTitle = (TextVIEw) itemVIEw.findVIEwByID(R.ID.cardTitle);    }}}

更新:我从资源加载图像,我没有下载什么

这是我的阵列

private voID initializeData() {    flowers = new ArrayList<>();    flowers.add(new Flower("Flower 1",R.drawable.p8));    flowers.add(new Flower("Flower 2",R.drawable.p10));    flowers.add(new Flower("Flower 3",R.drawable.p11));    flowers.add(new Flower("Flower 4",R.drawable.p8));    flowers.add(new Flower("Flower 5",R.drawable.photo2));    flowers.add(new Flower("Flower 6",R.drawable.photo6));    flowers.add(new Flower("Flower 7",R.drawable.p12));    flowers.add(new Flower("Flower 8",R.drawable.p9));    flowers.add(new Flower("Flower 9",R.drawable.p8));    flowers.add(new Flower("Flower 10",R.drawable.p8));    flowers.add(new Flower("Flower 11",R.drawable.p8));    flowers.add(new Flower("Flower 12",R.drawable.p10));}

更新2:我们通过设置adapter.setHasStableIDs(true)来修复大部分的滞后,但是应用程序在第一个滚动条件下仍然滞后,而图像尚未加载,如何解决?

更新3:我刚刚尝试从Web加载图像,一切似乎顺利,可能是从资源加载图像有一些问题.

好的,谢谢你们,我将从网页加载我的图片.

解决方法 RecyclerVIEw.setHasFixedSize()设置为true?我不能再现这个滞后…你可以把整个项目发贴到git吗?检查一下,也许它可以帮助你: http://antonioleiva.com/recyclerview/ 总结

以上是内存溢出为你收集整理的android – RecyclerView滞后滚动全部内容,希望文章能够帮你解决android – RecyclerView滞后滚动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1134328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存