RecyclerView Adapter中装有Glide的Gif无法正常播放

时间:2019-05-14 11:59:36

标签: 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)
        .into(ivBackground)

我尝试在onCreateViewHolderonBindViewHolder两个地方都添加此代码,但是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!!)
        }
    }
}

使用的滑行版本

implementation 'com.github.bumptech.glide:glide:4.8.0'
kapt 'com.github.bumptech.glide:compiler:4.8.0'

更新

我发现上面的代码在sdk版本小于pie的android设备上可以正常工作。在具有Android Pie的设备上,它无法正常工作。

1 个答案:

答案 0 :(得分:0)

您使用roundedImageView还是仅使用本机imageview

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