在我的情况下,我想要一个带有圆角的Drawable占位符,但该库并不支持此功能。后来我发现可以使用谷歌材料设计中的
ShapeableImageView
来实现这一点。
1.将谷歌材料设计库添加到您的依赖项中,版本为1.2.1及以上:
'com.google.android.material:material:1.2.1'
。
2.在列表项视图中,将您的ImageView定义为ShapeableImageView,如下所示:
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/shapeImageView"
android:layout_width="70dp"
android:layout_height="70dp"
android:background="@android:color/holo_red_dark"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
3. 在 RecyclerView.ViewHolder 类中,将上面的 ShapeableImageView 的 ShapeAppearanceModel 设置为 CornerFamily.ROUNDED
,并将要使用的圆角半径以像素为单位设置好,然后像下面这样将 ShimmerDrawable 作为 Glide 的占位符加载:
val shimmer = Shimmer.ColorHighlightBuilder()
.setBaseColor(ContextCompat.getColor(itemView.context, R.color.teal_200))
.setBaseAlpha(0.7f)
.setHighlightAlpha(0.7f)
.setHighlightColor(ContextCompat.getColor(itemView.context, R.color.purple_700))
.setDuration(1800)
.setDirection(Shimmer.Direction.LEFT_TO_RIGHT)
.setAutoStart(true)
.build()
val shimmerDrawable = ShimmerDrawable()
shimmerDrawable.setShimmer(shimmer)
val radius: Float = dpToPx(itemView.context, 15).toFloat();
shapeImageView.setShapeAppearanceModel(shapeImageView.getShapeAppearanceModel()
.toBuilder()
.setAllCorners(CornerFamily.ROUNDED, radius)
.build())
Glide.with(itemView.context).load(item.url)
.placeholder(shimmerDrawable)
.into(shapeImageView)
使用辅助类将半径从dp转换为像素
fun dpToPx(context: Context, dp: Int): Int {
return (dp * context.resources.displayMetrics.density).toInt()
}
执行以上代码后的结果如下:
ShimmerDrawable
的公共组件。你尝试过使用它吗? - Mike M.