首页 > 解决方案 > 由于可变大小的图像加载,聊天滚动(回收站视图)不流畅?

问题描述

我正在尝试制作一个聊天应用程序。我有不同的布局来接收消息和发送消息。我无法平滑滚动可能是因为图像大小可变?我认为这个问题与我为聊天消息框所做的布局有关。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        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" xmlns:tools="http://schemas.android.com/tools"
        android:layout_marginTop="11dp"
        android:layout_marginRight="16dp"
        android:gravity="right"
>


        <android.support.v7.widget.AppCompatTextView
            android:id="@+id/tv_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="11dp"
            android:paddingVertical="9dp"
            android:visibility="gone"
            tools:text="fdsfdsfsdfs"
            tools:visibility="gone"
            android:textColor="#2A2617"
            android:textSize="15dp"
            android:fontFamily="@font/nunito_regular"
        />

        <android.support.v7.widget.AppCompatImageView
                android:id="@+id/iv_message"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_below="@+id/tv_message"
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:scaleType="centerCrop"
                android:padding="11dp"
                android:visibility="gone" />


</RelativeLayout>

当我向上滚动时它会闪烁。View Holder的代码如下

when(data.messageType){
     Constant.MessageType.TEXT ->{
          messageIv.visibility = View.GONE
          messageTv.apply {
              visibility = View.VISIBLE
              text = data.content
          }
     }
     Constant.MessageType.IMAGE -> {
          Glide.with(messageIv.context)
                .load(data.content)
                .apply(
                    RequestOptions()
                        .apply {
                            diskCacheStrategy(DiskCacheStrategy.ALL)
                            skipMemoryCache(true)
                        })
                .into(messageIv)

          messageIv.visibility = View.VISIBLE
          messageTv.apply {
                visibility = View.GONE
          }
      }
}

我猜它每次滚动时都会调用 bind ,它会使可见性消失并可见。这会导致视图在一段时间内具有 0dp 大小,并且在加载图像时突然在视图中创建一个突然滚动,使其非常不稳定。

有什么解决方法吗?

标签: androidandroid-layoutandroid-recyclerview

解决方案


推荐阅读