我在ViewPager内部有一个RecyclerView实现,它的性能非常糟糕. Here’s a video of the performance in question.我有两种视图类型,并且正在使用ViewHolder模式(因此它不是通货膨胀或导致问题的视图).
这是cardview.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:orientation="vertical"
android:scrollbars="none">
<LinearLayout
android:id="@+id/next"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginBottom="8dp"
android:elevation="8dp"
android:orientation="horizontal" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/card_background"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/dots"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="?attr/activity_background"
android:orientation="horizontal">
</LinearLayout>
<View
android:id="@+id/dot"
android:layout_width="3dp"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/dots"
android:background="#fff" />
<RelativeLayout
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/dot"
android:orientation="vertical"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp">
<include
android:id="@+id/children"
layout="@layout/commentnumber"
android:layout_width="wrap_content"
android:layout_height="16dp"
android:layout_alignParentRight="true"
android:layout_gravity="right"
android:layout_marginBottom="-16dp"
android:layout_marginLeft="10dp"
android:gravity="center_horizontal"
android:orientation="horizontal" />
<com.wefika.flowlayout.FlowLayout
android:id="@+id/flow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingRight="10dp">
<TextView
android:id="@+id/author"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"
android:paddingRight="5dp"
android:text="ccrama"
android:textColor="?attr/font"
android:textSize="?attr/font_commenttitle"
android:textStyle="bold"
/>
<TextView
android:id="@+id/score"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="+49"
android:textColor="?attr/font"
android:textSize="?attr/font_commentinfo"
android:textStyle="bold" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_alignParentRight="true"
android:layout_gravity="center_vertical"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="4 hours ago"
android:textColor="?attr/font"
android:textSize="?attr/font_commentinfo" />
<include
android:id="@+id/gild"
layout="@layout/gilded"
android:layout_width="wrap_content"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:paddingLeft="5dp"
android:paddingRight="5dp" />
<include
android:id="@+id/flairbubble"
layout="@layout/flair"
android:layout_width="wrap_content"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:layout_toRightOf="@+id/pinned"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:src="@drawable/pinned" />
<include
android:id="@+id/you"
layout="@layout/you"
android:layout_width="wrap_content"
android:layout_height="16dp"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_toRightOf="@+id/pinned"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:src="@drawable/pinned" />
<include
android:id="@+id/op"
layout="@layout/op"
android:layout_width="wrap_content"
android:layout_height="16dp"
android:layout_marginLeft="4dp"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_toRightOf="@+id/pinned"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:src="@drawable/pinned" />
</com.wefika.flowlayout.FlowLayout>
<me.ccrama.redditslide.ActiveTextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/flow"
android:paddingBottom="8dp"
android:textColor="?attr/font"
android:textSize="?attr/font_commentbody" />
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/menu"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_below="@+id/background"
android:orientation="horizontal"
android:weightSum="4">
<ImageView
android:id="@+id/more"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="?android:selectableItemBackground"
android:padding="12dp"
android:src="@drawable/more"
android:tint="?attr/tint" />
<ImageView
android:id="@+id/downvote"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="?android:selectableItemBackground"
android:padding="12dp"
android:src="@drawable/downvoteicon"
android:tint="?attr/tint" />
<ImageView
android:id="@+id/upvote"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="?android:selectableItemBackground"
android:padding="12dp"
android:src="@drawable/upvoteicon"
android:tint="?attr/tint" />
<ImageView
android:id="@+id/reply"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="?android:selectableItemBackground"
android:padding="12dp"
android:src="@drawable/reply"
android:tint="?attr/tint" />
</LinearLayout>
<LinearLayout
android:id="@+id/replyArea"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/menu"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/replyLine"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="?attr/tint"
android:hint="Reply"
android:imeOptions="actionDone|flagNoEnterAction"
android:inputType="textMultiLine|textAutoCorrect|textCapSentences"
android:minHeight="30dp"
android:textColor="?attr/font"
android:textColorHint="?attr/font" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/discard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:selectableItemBackground"
android:padding="4dp"
android:text="DISCARD"
android:textColor="?attr/font"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="?android:selectableItemBackground"
android:padding="4dp"
android:text="SUBMIT"
android:textColor="?attr/font"
android:textSize="14sp"
android:textStyle="bold" />
</RelativeLayout>
<LinearLayout
android:id="@+id/innersend2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="-6dp"
android:layout_marginRight="-6dp"
android:alpha=".56"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="8">
<ImageButton
android:id="@+id/imagerep"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:height="48dp"
android:background="#00000000"
android:cropToPadding="false"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/image"
android:tint="?attr/tint" />
<ImageButton
android:id="@+id/link"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:height="48dp"
android:background="#00000000"
android:cropToPadding="false"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/link"
android:tint="?attr/tint" />
<ImageButton
android:id="@+id/bold"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:height="48dp"
android:background="#00000000"
android:cropToPadding="false"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/bold"
android:tint="?attr/tint" />
<ImageButton
android:id="@+id/italics"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:height="48dp"
android:background="#00000000"
android:cropToPadding="false"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/italics"
android:tint="?attr/tint" />
<ImageButton
android:id="@+id/bulletlist"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:height="48dp"
android:background="#00000000"
android:cropToPadding="false"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/bullets"
android:tint="?attr/tint" />
<ImageButton
android:id="@+id/numlist"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:height="48dp"
android:background="#00000000"
android:cropToPadding="false"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/numbers"
android:tint="?attr/tint" />
<ImageButton
android:id="@+id/quote"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:height="48dp"
android:background="#00000000"
android:cropToPadding="false"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/quotes"
android:tint="?attr/tint" />
<ImageButton
android:id="@+id/size"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:height="48dp"
android:background="#00000000"
android:cropToPadding="false"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/fontsizedarker"
android:tint="?attr/tint" />
</LinearLayout>
</LinearLayout>
删除除通货膨胀以外的所有适配器代码仍会导致明显的滞后.
我真的找不到这个的底部,非常感谢任何帮助/提示.
编辑:更多信息:删除数据集“隐藏”代码(getRealPosition,hideAll,unhideAll)对RecyclerView的速度没有影响.另外,删除FlowLayout不会使其更快.
解决方法:
我在RecyclerView上遇到了同样的问题.太懒了.就我而言,RecyclerView中有一个水平的图像按钮列表.
我通过从ImageButtons或ImageViews中删除scaleType并通过大小调整为Picasso加载图像来解决了这个问题:
Picasso.with(context).load(icon.get(position)).resize(270,270).centerCrop().into(holder.iconView);
滞后问题可能是由于运行时缩放大尺寸图像而导致的.图片.不建议这样做.毕加索(Picasso)负责调整大小和有效加载.它还为您处理缓存.