所以,我可以从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)问题:这个抽屉有直条形状,闪闪发亮。
但我想让它直指圆角。除了帮助库和修改ShimmerDrawable之外,还有其他解决方案吗?也许一些包装成另一个可拖的,闲聊
这个库有关于圆角https://github.com/facebook/shimmer-android/issues/84的问题,但是只有可用的解决方案是用CardView保存这个可绘制的视图,我不想这样做。
发布于 2021-06-09 16:19:37
从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);为了在不同的屏幕密度之间可移植,您可能还需要在创建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());
}https://stackoverflow.com/questions/67788355
复制相似问题