1

所以,我可以从https://github.com/facebook/shimmer-android

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具有矩形形状,正在闪烁。

但我希望它是带圆角的矩形。除了贡献库和修改 ShimmerDrawable 之外,是否有任何解决方案?也许有些包裹到另一个可绘制对象中,idk

这个库有关于圆角的问题https://github.com/facebook/shimmer-android/issues/84但唯一可用的解决方案是用 CardView 包装持有这个可绘制的视图,我不想要这个

4

1 回答 1

1

看看ShimmerDrawable.java的源代码,实现你想要的并不难。有几件事需要稍微改变。

// private final Rect mDrawRect = new Rect();
private final RectF mDrawRect = new RectF();

...

// canvas.drawRect(mDrawRect, mShimmerPaint);
canvas.drawRoundRect(mDrawRect, 50f, 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, mShimmerPaint);
canvas.drawRoundRect(mDrawRect, xRadius, yRadius, mShimmerPaint);

稍后,您可以创建一个ShimmerDrawable

  • 科特林
val shimmerDrawable = ShimmerDrawable(50f, 50f)
  • 爪哇
ShimmerDrawable shimmerDrawable = new ShimmerDrawable(50f, 50f);

并且要在不同的屏幕密度之间移植,您可能还希望xRadiusyRadius创建ShimmerDrawable.

private final int dpToPx(final Context context,final float dp)
{
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
于 2021-06-09T16:19:37.347 回答