如何解决圆形 shimmerDrawable (facebook android-shimmer)
所以,我有来自 https://github.com/facebook/shimmer-android
的 drawableval shimmer = ColorHighlightBuilder()
.setBaseColor(ContextCompat.getColor(context,R.color.skeleton_mask))
.setBaseAlpha(SHIMMERING_BASE_ALPHA)
.setHighlightAlpha(SHIMMERING_HIGHLIGHT_ALPHA)
.setHighlightColor(ContextCompat.getColor(context,R.color.skeleton_shimmer))
.setDuration(SHIMMERING_DURATION)
.setDirection(Shimmer.Direction.LEFT_TO_RIGHT)
.setAutoStart(true)
.build()
val shimmerDrawable = ShimmerDrawable()
shimmerDrawable.setShimmer(shimmer)
问题:这个 drawable 有 Rect 形状,正在闪烁。
但我希望它是带有圆角的矩形。除了为库做出贡献和修改 ShimmerDrawable 之外,是否有任何解决方案?也许有些包装成另一个可绘制的,idk
这个库有关于圆角 https://github.com/facebook/shimmer-android/issues/84 的问题,但唯一可用的解决方案是用 CardView 包裹视图持有这个 drawable,我不想要这个
解决方法
看看ShimmerDrawable.java的源代码,实现你想要的并不难。有几件事情需要稍微改动一下。
// private final Rect mDrawRect = new Rect();
private final RectF mDrawRect = new RectF();
...
// canvas.drawRect(mDrawRect,mShimmerPaint);
canvas.drawRoundRect(mDrawRect,50f,mShimmerPaint);
就是这样。但是为了您自己的方便,您可能希望对其进行更多修改。如果是这样,请忽略上面的代码并按照以下代码进行操作。
// private final Rect mDrawRect = new Rect();
private final RectF mDrawRect = new RectF();
private final float xRadius;
private final float yRadius;
public ShimmerDrawable(final float xRadius,final float yRadius) {
mShimmerPaint.setAntiAlias(true);
this.xRadius = xRadius;
this.yRadius = yRadius;
}
...
// canvas.drawRect(mDrawRect,xRadius,yRadius,mShimmerPaint);
稍后,您可以使用以下命令创建 ShimmerDrawable
:
- 科特林
val shimmerDrawable = ShimmerDrawable(50f,50f)
- Java
ShimmerDrawable shimmerDrawable = new ShimmerDrawable(50f,50f);
为了在不同屏幕密度下可移植,您可能还需要在创建 xRadius
之前转换 yRadius
和 ShimmerDrawable
的值。
private final int dpToPx(final Context context,final float dp)
{
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dp,context.getResources().getDisplayMetrics());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。