我有一个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!!)
}
}
}
使用的滑行版本
implementation 'com.github.bumptech.glide:glide:4.8.0'
kapt 'com.github.bumptech.glide:compiler:4.8.0'
更新
我发现上面的代码在sdk版本小于pie的android设备上可以正常工作。在具有Android Pie的设备上,它无法正常工作。
答案 0 :(得分:0)
您使用roundedImageView
还是仅使用本机imageview
?
使用roundedImageView
时遇到了同样的问题。我将其替换为本地ImageView
,即gif播放。