我希望矩形的左右两侧(而不是角落)是弯曲的。或者说椭圆形的顶部和底部是直的。
我怎样才能达到这样的目标?
答案 0 :(得分:11)
在textview上试试这个,对于单个字符,它会显示一个圆圈,对于多个数字,它会自动扩展为你在上面显示的形状,但如果你严格要求上面的形状,只需在左右两侧给出更大的填充
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<padding
android:top="3dp"
android:left="8dp"
android:right="8dp"
android:bottom="3dp"/>
<solid android:color="#E6121A" />
<corners
android:bottomLeftRadius="12dp"
android:bottomRightRadius="12dp"
android:topLeftRadius="12dp"
android:topRightRadius="12dp" />
</shape>
答案 1 :(得分:7)
一切正常!
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="@color/color_red"/>
<corners
android:radius="10000dp" />
</shape>
答案 2 :(得分:5)
我迟到了,答案一定不能完全完成(我不考虑灵活的高度),但至少如果我们提前知道dp中的高度,诀窍是将半径设为高度的一半的按钮。例如,如果高度为48dp,我们可以执行以下操作:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#ff0000"/>
<corners android:radius="24dp" />
</shape>
答案 3 :(得分:1)
我认为最好的想法之一是使用xml fiel创建形状。
创建 Drawable-&gt; ovalshape.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#ff0000" />
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
<padding
android:bottom="5dip"
android:left="10dip"
android:right="10dip"
android:top="5dip" />
</shape>
现在您可以轻松使用此xml instead of image
。我认为这对you and new SO user
很有帮助。
答案 4 :(得分:0)
尝试将边框半径设置为高度的一半。在CSS中,border-radius:50%
会创建一个椭圆,所以我猜如果它只有50%的高度,那么你会得到类似的东西。
答案 5 :(得分:0)
简单的方法是使用9-patch image(以image.9.png结尾的png图像)并使用额外的像素边框来定义如何缩放图像。
另一种方法是在res / drawable文件夹中创建一个形状文件。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid android:color="#ff0000"/>
</shape>
有关形状here
的更多信息答案 6 :(得分:0)
似乎形状允许的最大半径是下方形状中总高度的一半,因此您可以使用它来形成具有灵活高度的形状,以保持欲望比率:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff" />
<size android:height="@dimen/height" />
<corners
android:radius="@dimen/height"
/>
</shape>
答案 7 :(得分:0)
定义高度并使半径为半高。
答案 8 :(得分:0)
您可以将半径大小增加到200dp,并将drawable设置为textview的背景
<solid android:color="#E6121A" />
<corners
android:bottomLeftRadius="12dp"
android:bottomRightRadius="12dp"
android:topLeftRadius="12dp"
android:topRightRadius="12dp" />
答案 9 :(得分:0)
为了让双方始终保持任何高度的曲线,我最终必须以编程方式创建形状,如下所示(Kotlin中的代码)
class CurvedSidesShape : RectShape() {
override fun draw(canvas: Canvas, paint: Paint?) {
var path = Path()
path.addRoundRect(rect(), rect().height(), rect().height(), Path.Direction.CW)
canvas.drawPath(path, paint)
}
}
以下是我如何将形状用作按钮背景
class CurvedSidesButton : Button {
private var mHeight: Int = 0
constructor(context: Context?) : super(context) {
init(context, null, 0, 0)
}
.
.
.
override fun draw(canvas: Canvas?) {
setCurvedSidesBackground(height)
super.draw(canvas)
}
private fun setCurvedSidesBackground(height: Int) {
if (height != mHeight) {
val curvedSidesShape = ShapeDrawable(CurvedSidesShape())
curvedSidesShape.intrinsicWidth = width
curvedSidesShape.intrinsicHeight = height
curvedSidesShape.paint.color = Color.RED
background = curvedSidesShape
mHeight = height
}
}
}