微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

圆形 shimmerDrawable (facebook android-shimmer)

如何解决圆形 shimmerDrawable (facebook android-shimmer)

所以,我有来自 https://github.com/facebook/shimmer-android

的 drawable
val 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 之前转换 yRadiusShimmerDrawable 的值。

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 举报,一经查实,本站将立刻删除。