我正在使用Groupie RecyclerView来显示一些数据,并使用CardSlider Library和带有Glide的ViewPager2来显示多个图像。我遇到的是,在图像加载了名字之后,UI可以按原样正常显示图像。但是,当我继续滚动时,特定项目/位置中的某些图像会缩小。我一直在寻找并尝试了一些解决方案,但似乎都不起作用。
这些是我当前的代码示例:
PostsAdapter
class PostsAdapter(val posts: Posts?) : Item() {
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
posts?.apply {
viewHolder.updateName(profile.fullName)
viewHolder.updateFeedMessage(feed.message)
viewHolder.updateMediaViewPager(posts)
viewHolder.updateReactionCount(feed.reactionCount)
viewHolder.updateReactionIcon(hasReacted)
viewHolder.updateCommentCount(feed.commentCount)
}
}
override fun getLayout(): Int = R.layout.item_post_contents
private fun GroupieViewHolder.updateName(name: String) {
containerView.txtUserName.text = name
}
private fun GroupieViewHolder.updateFeedMessage(message: String?) {
containerView.txtFeedMessage.text = message
}
private fun GroupieViewHolder.updateMediaViewPager(posts: Posts?) {
val images = listOfNotNull(
posts?.mediaOne?.largeUrl,
posts?.mediaTwo?.largeUrl,
posts?.mediaThree?.largeUrl,
posts?.mediaFour?.largeUrl,
posts?.mediaFive?.largeUrl
)
if (images.size <= 1) {
val requestOptions = RequestOptions().diskCacheStrategy(DiskCacheStrategy.RESOURCE)
Glide.with(containerView.imgMediaOne.context)
.load(posts?.mediaOne?.largeUrl).apply(requestOptions)
.dontAnimate()
.override(1000, 800)
.into(containerView.imgMediaOne)
.clearOnDetach()
containerView.mediaViewPager.visibility = View.GONE
containerView.indicator.visibility = View.GONE
} else {
val adapter = MediaViewPagerAdapter(images)
containerView.mediaViewPager.adapter = adapter
containerView.imgMediaOne.visibility = View.GONE
}
}
private fun GroupieViewHolder.updateReactionCount(reactionCount: Int?) {
containerView.txtReactionCount.text =
if (reactionCount == 0) "" else reactionCount.toString()
}
private fun GroupieViewHolder.updateReactionIcon(isReacted: Boolean) {
if (isReacted) {
containerView.imgReaction.setImageResource(R.drawable.ic_heart_clicked)
} else {
containerView.imgReaction.setImageResource(R.drawable.ic_heart_unclicked)
}
}
private fun GroupieViewHolder.updateCommentCount(commentCount: Int?) {
containerView.txtCommentCount.text = if (commentCount == 0) "" else commentCount.toString()
}
}
MediaViewPagerAdapter
class MediaViewPagerAdapter(
private val images: List<String?>
) : CardSliderAdapter<MediaViewPagerAdapter.ViewPagerHolder>() {
inner class ViewPagerHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewPagerHolder {
val view = LayoutInflater
.from(parent.context)
.inflate(R.layout.item_media_content, parent, false)
return ViewPagerHolder(view)
}
override fun getItemCount(): Int = images.size
override fun bindVH(holder: ViewPagerHolder, position: Int) {
val currentImage = images[position]
val requestOptions = RequestOptions().diskCacheStrategy(DiskCacheStrategy.RESOURCE)
Glide
.with(holder.itemView.imgMedia.context)
.load(currentImage).apply(requestOptions)
.dontAnimate()
.override(1500, 1200)
.centerCrop()
.into(holder.itemView.imgMedia)
.clearOnDetach()
}
}
imgMediaOne ImageView
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgMediaOne"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_6"
android:background="@android:color/transparent"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:layout_constraintBottom_toTopOf="@id/postBottomBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/txtFeedMessage" />
imgMedia ImageView
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imgMedia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:background="@android:color/transparent"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />