Прокрутка чата (просмотр переработчика) не плавная из-за загрузки изображения с переменным размером?

#android #android-layout #android-recyclerview

#Android #android-макет #android-recyclerview

Вопрос:

Я пытаюсь создать приложение для чата. Где у меня разные макеты для получения сообщений и отправки сообщений. Я не могу получить плавную прокрутку, возможно, из-за переменного размера изображения? Я думаю, что эта проблема связана с макетом, который я сделал для окна сообщения чата.

 <?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>
  

Он мерцает при прокрутке вверх. Код держателя представления выглядит следующим образом

 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
          }
      }
}
  

Я предполагаю, что при каждой прокрутке он вызывает привязку, и это делает видимость исчезающей и видимой. Из-за чего вид имеет размер 0dp в течение некоторого времени, и внезапно, когда изображение загружается, оно создает внезапную прокрутку в представлении, что делает его очень нестабильным.

Есть какие-либо обходные пути для этого?

Комментарии:

1. Не используйте одни и те же ViewHolder s как для изображений, так и для текстовых сообщений. Разделите их на несколько itemViewType с их собственными макетами.

2. @Павел Привет. Можете ли вы немного объяснить, почему этого не должно быть? Спасибо.