首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >圆形shimmerDrawable (facebook android-shimmer)

圆形shimmerDrawable (facebook android-shimmer)
EN

Stack Overflow用户
提问于 2021-06-01 11:51:45
回答 1查看 666关注 0票数 2

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

代码语言:javascript
复制
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保存这个可绘制的视图,我不想这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-09 16:19:37

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

代码语言:javascript
复制
// private final Rect mDrawRect = new Rect();
private final RectF mDrawRect = new RectF();

...

// canvas.drawRect(mDrawRect, mShimmerPaint);
canvas.drawRoundRect(mDrawRect, 50f, 50f, mShimmerPaint);

仅此而已。但是,为了您自己的方便,您可能想要修改它一些。如果是这样的话,忽略上面的代码并遵循下面的代码。

代码语言:javascript
复制
// 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

  • Kotlin
代码语言:javascript
复制
val shimmerDrawable = ShimmerDrawable(50f, 50f)
  • Java
代码语言:javascript
复制
ShimmerDrawable shimmerDrawable = new ShimmerDrawable(50f, 50f);

为了在不同的屏幕密度之间可移植,您可能还需要在创建xRadiusyRadius之前转换ShimmerDrawable的值。

代码语言:javascript
复制
private final int dpToPx(final Context context,final float dp)
{
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67788355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档