Android 如何优化具有多宽高比的图像的RecyclerView,以避免跳转/延迟/jank?

Android 如何优化具有多宽高比的图像的RecyclerView,以避免跳转/延迟/jank?,android,android-recyclerview,android-glide,fresco,Android,Android Recyclerview,Android Glide,Fresco,我们的应用程序是一款以形象为主、以时尚为中心的应用程序。它的主屏幕包含一个类似Instagram的提要,它从服务器加载图像的URL,并使用Glide加载 因为我们使用的是RecyclerView,所以每次项目离开屏幕时都会重新绘制。问题是,每当用户向下(或向上)滚动时,这会导致jank/lag,并且RecyclerView需要重新绘制图像(然后调用adjustViewBounds),以使图像的宽度“填充”屏幕宽度,同时保持比率 ImageView的XML代码 <ImageView

我们的应用程序是一款以形象为主、以时尚为中心的应用程序。它的主屏幕包含一个类似Instagram的提要,它从服务器加载图像的URL,并使用Glide加载

因为我们使用的是RecyclerView,所以每次项目离开屏幕时都会重新绘制。问题是,每当用户向下(或向上)滚动时,这会导致jank/lag,并且RecyclerView需要重新绘制图像(然后调用
adjustViewBounds
),以使图像的宽度“填充”屏幕宽度,同时保持比率

ImageView的XML代码

<ImageView
    android:id="@+id/homeFeed_IV_lookImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    app:imageUrl="@{homeFeedItemViewModel.lookImage}"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:src="@drawable/static_image_1" />
扩展功能

fun ImageView.displayImage(url: String = "") {
    Glide.with(context)
            .load(url)
            .apply(RequestOptions().placeholder(R.color.imagePlaceholder)
                    .diskCacheStrategy(DiskCacheStrategy.ALL))
            .into(this)
}

这种“滞后/僵硬”会带来不愉快的体验。有什么方法可以使RecyclerView中的图像重画更平滑吗?

您可以通过使用固定大小的图像视图来提高性能。
如果您控制后端,并且有可能包含关于图像的更多信息,而不仅仅是URL(以便在提要负载中包含宽度和高度或图像纵横比)。

由于您的imageview根据屏幕的纵横比和宽度调整其高度,您无需缩放图像。尝试删除android:scaleType=“fitXY”
fun ImageView.displayImage(url: String = "") {
    Glide.with(context)
            .load(url)
            .apply(RequestOptions().placeholder(R.color.imagePlaceholder)
                    .diskCacheStrategy(DiskCacheStrategy.ALL))
            .into(this)
}