Android-仅可在顶部绘制圆角
我画了一个圆形的矩形作为背景:Android-仅可在顶部绘制圆角,android,drawable,rounded-corners,Android,Drawable,Rounded Corners,我画了一个圆形的矩形作为背景: <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/white" /> <stroke android:width="1dp" android:color="@color/light_gray" /> <padding android:left="10dp" a
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke android:width="1dp" android:color="@color/light_gray" />
<padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
<corners android:radius="6dp" />
</shape>
正如预期的那样,这工作正常
现在,我想将其更改为仅围绕顶部拐角,因此我将其更改为:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke android:width="1dp" android:color="@color/light_gray" />
<padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
<corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>
但是现在没有一个角是圆角,我得到了一个普通的矩形。我在这里遗漏了什么?尝试给出以下值:
<corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
android:bottomLeftRadius="0.1dp" android:bottomRightRadius="0.1dp"/>
请注意,我已将0dp
更改为0.1dp
编辑:请参见下面的Aleks G以获得更清晰的版本我尝试了您的代码并得到了一个顶部圆角按钮。我给的颜色是
@ffffff
和笔划是#c0c0
试一试
尝试这样做:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:bottom="-20dp" android:left="-20dp">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<corners android:radius="20dp" />
</shape>
</item>
</layer-list>
似乎不适合设置不同的矩形角半径。因此,您可以使用此技巧。在此基础上,您可以制作一个只有一个圆角的可绘制的(本例中为左上角):
请注意,上述可绘制
在Android Studio预览版(2.0.0p7)中未正确显示。若要预览它,请创建另一个视图,并将其用作以下代码中的示例中的android:background=“@drawable/…”
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="10dp" android:bottom="-10dp"
>
<shape android:shape="rectangle">
<solid android:color="@color/maincolor" />
<corners
android:topLeftRadius="10dp"
android:topRightRadius="10dp"
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
/>
</shape>
</item>
</layer-list>
您可能需要阅读此内容
下面是一张便条
注:每个角(最初)必须提供大于1的角半径,否则没有圆角。如果您希望特定的角点不被圆角,解决方法是使用android:radius将默认角点半径设置为大于1,然后使用您真正想要的值覆盖每个角点,提供零(“0dp”)不需要圆角的地方。在drawable上创建roung\u top\u corners.xml并复制以下代码
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:topLeftRadius="22dp"
android:topRightRadius="22dp"
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
/>
<gradient
android:angle="180"
android:startColor="#1d2b32"
android:centerColor="#465059"
android:endColor="#687079"
android:type="linear" />
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="270dp"
android:height="60dp"
/></shape>
尝试完全删除这些属性
android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"
尝试使用materialshapedravable
并在kotlin/java代码中对其进行配置
val backgroundShapeModel = ShapeAppearanceModel.builder()
.setTopLeftCorner(CornerFamily.ROUNDED, 16F.toPx)
.setTopRightCorner(CornerFamily.ROUNDED, 16F.toPx)
.build()
textView.background = MaterialShapeDrawable(backgroundShapeModel).apply {
fillColor = ColorStateList.valueOf(Color.GREEN)
}
附笔:
除了xml
drawables提供的功能(填充颜色、笔划…)之外,MaterialShapeDrawable
还支持:
cornerFamily
分为两类:rounded
和cut
edgeTreatment
带TriangleEdgeTreatment
,OffsetEdgeTreatment
不需要上下文和获取资源
]
bg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners android:topLeftRadius="24dp" android:topRightRadius="24dp"
android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>
android:background="@drawable/bg"
这确实不是一个解决方案,但我想我曾经遇到过类似的问题。将stoke增加到2像素有帮助,但你知道,这不是一个解决方案。这里有一个关于形状角的问题:这是什么android版本?我的应用程序必须在1.6版上运行,emulator 1.6也有问题。进一步研究后,我发现了一个更好的解决方案:
-这会产生完美的方形底角,甚至没有任何圆角。然而,你的解决方案基本上是可行的。在给定位图的情况下,如何在代码中做到这一点?如何在其周围添加轮廓(又称笔划)?@Aleks G我认为没有必要指定android:radius=“1dp”
@hmac这是必要的。阅读文档,说明得很清楚。@AleksG是的,文档是错误的,在三星10、安卓9上测试:“每个角落都必须(最初)提供大于1的角半径,否则不圆角。如果您希望不圆角特定角,解决方法是使用android:radius设置大于1的默认角半径,但然后覆盖“-不为真,我指定右下角、右上角、,左上角为零,左下角+ve和左下角是正确的曲线参见我自己的答案-对于不同的角有不同的半径是完全可以接受的。我尝试过这种方法,这是不可接受的,ide告诉它不适合有不同的RSDIU和忽略it@AleksG-当然。它在今天和当时一样重要(作为证据——我需要类似的东西)。你必须知道,随着时间的推移,一些做事的方式变得不受欢迎,可能需要用更现代的方式来取代。正如busylee提到的,IDE在定义不同的角半径时会出现问题,而本方法的情况并非如此。此外,由于这个问题是我在谷歌(iirc)上的第一次点击,所以我有理由更新它。不管怎样,我相信SO不会介意更多KB的代码…:)除非您希望在视图中添加填充,否则不需要项目的顶部和底部属性,但在其他情况下,这是可行的。如果您完整阅读问题,您会注意到这不起作用,这就是问题首先被问到的原因。有趣的是,在我的情况下,它起作用了:)
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners android:topLeftRadius="24dp" android:topRightRadius="24dp"
android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>
android:background="@drawable/bg"