ShapeDrawable 以编程方式绘制圆形切边
ShapeDrawable to draw circle programatically chopping the sides
我想在 PreviewView
上点击画一个相机对焦圈。所以,我写了一些代码来画一个圆圈,如下所示
val sd = ShapeDrawable(OvalShape())
sd.paint.color = Color.parseColor("#ffffff")
sd.paint.style = Paint.Style.STROKE
sd.paint.strokeWidth = 20f
var img: ImageView = ImageView(this);
img.background = sd
val params = FrameLayout.LayoutParams(250, 250)
params.leftMargin = event.x.toInt() - 125
params.topMargin = event.y.toInt() - 125
idFocusIndicator.removeAllViews()
idFocusIndicator.addView(img, params)
你可以在下面清楚地看到它是如何在所有四个边上切割圆的边
我需要一个清晰的圆圈而不是砍掉一个!如何实现?
好的,经过一番研究后,我用 GradientDrawable
替换了 ShapeDrawable
,它起作用了。
但是,我不知道为什么 ShapeDrawable
有问题。如果有人知道请在这里评论。
val shape = GradientDrawable()
shape.setShape(GradientDrawable.OVAL)
shape.setColor(Color.TRANSPARENT)
shape.setStroke(20, Color.WHITE)
这看起来与 the one here 的问题相同。当您以编程方式而不是在 XML 中创建 ShapeDrawable 时,它会将笔划宽度的中心放在 canvas 的边缘,因此您的笔划宽度的一半将被裁掉。如果您不能使用 XML,您可以使用 LayerList 为您的可绘制对象提供一个插图,这样边缘就不会被裁掉。
float strokeWidth = 20f;
val sd = ShapeDrawable(OvalShape()).apply {
paint.color = Color.parseColor("#ffffff")
paint.style = Paint.Style.STROKE
paint.strokeWidth = strokeWidth
}
val layerDrawable = LayerDrawable(arrayOf(sd)).apply {
val inset = strokeWidth / 2f
setLayerInset(0, inset, inset, inset, inset)
}
val img: ImageView = ImageView(this)
img.background = layerDrawable
我想在 PreviewView
上点击画一个相机对焦圈。所以,我写了一些代码来画一个圆圈,如下所示
val sd = ShapeDrawable(OvalShape())
sd.paint.color = Color.parseColor("#ffffff")
sd.paint.style = Paint.Style.STROKE
sd.paint.strokeWidth = 20f
var img: ImageView = ImageView(this);
img.background = sd
val params = FrameLayout.LayoutParams(250, 250)
params.leftMargin = event.x.toInt() - 125
params.topMargin = event.y.toInt() - 125
idFocusIndicator.removeAllViews()
idFocusIndicator.addView(img, params)
你可以在下面清楚地看到它是如何在所有四个边上切割圆的边
我需要一个清晰的圆圈而不是砍掉一个!如何实现?
好的,经过一番研究后,我用 GradientDrawable
替换了 ShapeDrawable
,它起作用了。
但是,我不知道为什么 ShapeDrawable
有问题。如果有人知道请在这里评论。
val shape = GradientDrawable()
shape.setShape(GradientDrawable.OVAL)
shape.setColor(Color.TRANSPARENT)
shape.setStroke(20, Color.WHITE)
这看起来与 the one here 的问题相同。当您以编程方式而不是在 XML 中创建 ShapeDrawable 时,它会将笔划宽度的中心放在 canvas 的边缘,因此您的笔划宽度的一半将被裁掉。如果您不能使用 XML,您可以使用 LayerList 为您的可绘制对象提供一个插图,这样边缘就不会被裁掉。
float strokeWidth = 20f;
val sd = ShapeDrawable(OvalShape()).apply {
paint.color = Color.parseColor("#ffffff")
paint.style = Paint.Style.STROKE
paint.strokeWidth = strokeWidth
}
val layerDrawable = LayerDrawable(arrayOf(sd)).apply {
val inset = strokeWidth / 2f
setLayerInset(0, inset, inset, inset, inset)
}
val img: ImageView = ImageView(this)
img.background = layerDrawable