使用glide时如何消除从服务器加载图像的延迟?

时间:2019-04-10 09:49:02

标签: android android-recyclerview android-glide

我有一个带有recyclerView的活动,我想从服务器加载图像并使用glide库在recyclerView中显示它们。

图片的大小不同(600x400、900x1360等)。

问题:快速滚动到底部或顶部时,加载和显示图像会有延迟:

screen capture

我该如何消除这种烦人的延迟?

活动xml:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/act_main_recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

recyclerView项目xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:background="@color/colorPrimary">


    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="32dp"
        android:layout_marginTop="16dp"
        android:layout_marginRight="32dp"
        android:text="Image Name"
        android:textColor="@android:color/white"
        android:textSize="18sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/postImage"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/textView" />

</android.support.constraint.ConstraintLayout>

recyclerView适配器中的onBindViewHolder:

@Override
    public void onBindViewHolder(@NonNull Image_ViewHolder holder, int position) {

        Glide.with(context)
                .load(addresses.get(position))
                .into(holder.postImage);

    }

ps。如果我为imageView设置了固定大小(例如600 x 400),该问题将得到解决,但我希望图像具有原始大小。

1 个答案:

答案 0 :(得分:0)

用以下代码替换您的Glide代码:

Glide.with(context).load(addresses.get(position))
                    .override(nWidth, Target.SIZE_ORIGINAL)                       
                    .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.ALL))
                    .into(holder.imgLogo);

nWidth =以像素px调整图像大小。 (例如200)

如果您能够接收图像尺寸,然后针对该问题再提出一个建议,然后将该尺寸应用为ImageView高度和宽度。