Android 在RecyclerView适配器中加载了Glide的Gif无法正常播放

Android 在RecyclerView适配器中加载了Glide的Gif无法正常播放,android,android-recyclerview,android-glide,android-viewholder,Android,Android Recyclerview,Android Glide,Android Viewholder,我有一个recyclerview,它在水平视图中显示图像列表。我想在每个图像视图周围显示一个gif,就像一个与instagram的故事视图类似的轮廓 下面是加载相同代码的代码 GlideApp .with(itemView.context).asGif() .load(R.drawable.red) .error(R.drawable.red) .diskCacheStrategy(DiskCacheStrategy.DATA)

我有一个recyclerview,它在水平视图中显示图像列表。我想在每个图像视图周围显示一个gif,就像一个与instagram的故事视图类似的轮廓

下面是加载相同代码的代码

GlideApp
        .with(itemView.context).asGif()
        .load(R.drawable.red)
        .error(R.drawable.red)
        .diskCacheStrategy(DiskCacheStrategy.DATA)
        .into(ivBackground)
我尝试在两个位置添加此代码,即
onCreateViewHolder
onBindViewHolder
,但gif播放不正常

它一次只显示一帧。如果我通过按后退按钮暂停当前活动,然后从最近的应用程序菜单导航回该应用程序,然后显示下一帧

我的gif存储在drawable文件夹中,我的gif在活动/片段中正常工作

问题是它在recyclerview适配器中无法正常播放

这是完整的适配器类

    class LiveViewAdapter(
    val context: Context,
    val liveList: ArrayList<DataItem>,
    private val listener: LiveViewAdapterListener
) :
    RecyclerView.Adapter<LiveViewHolder>() {
    private val inflater: LayoutInflater

    interface LiveViewAdapterListener {
        fun onLiveClicked(url: String)
    }

    init {

        inflater = LayoutInflater.from(context)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LiveViewHolder {
        val view = inflater.inflate(R.layout.item_live, parent, false)

        return LiveViewHolder(view)
    }

    override fun getItemCount(): Int {
        return liveList.size
    }

    override fun onBindViewHolder(holder: LiveViewHolder, position: Int) {
        val requestOptions = RequestOptions().apply {
            placeholder(R.mipmap.ic_launcher_round)
            error(R.mipmap.ic_launcher_round)
        }
        val videoId = liveList[holder.adapterPosition].liveUrl?.substring(liveList[holder.adapterPosition].liveUrl?.lastIndexOf("=")!! + 1)
        val imageUrl = "https://img.youtube.com/vi/$videoId/hqdefault.jpg"
        Glide.with(context)
            .load(liveList[position].liveUrl)
            .apply(requestOptions)
            .thumbnail(Glide.with(context).load(imageUrl))
            .into(holder.ivLive)


        holder.ivLive.setOnClickListener {
            listener.onLiveClicked(liveList[holder.adapterPosition].liveUrl!!)
        }
    }
}
更新


我发现上面的代码在sdk版本低于pie的android设备上运行良好。在使用android pie的设备上,它工作不正常。

您使用的是
roundedImageView
还是纯本机
imageview


我在使用
roundedImageView
时遇到了同样的问题。我将其替换为本机的gif播放
ImageView

您使用的是哪个版本的Glide?我正在使用Glide在recyclerview中加载gif,我没有问题。GlideApp的代码似乎很完美。在
RecyclerView.Adapter
@sanjeev添加了glide dependency中可能还有其他问题。我刚刚用它加载了一个gif,效果很好<代码>使用(getActivity()).load(myList.get(position.getBgimg()).into(holder.card_main)滑动@sanjeev似乎是从url加载的。就我而言,我使用的是drawable
implementation 'com.github.bumptech.glide:glide:4.8.0'
kapt 'com.github.bumptech.glide:compiler:4.8.0'