在Android中使用负半径来定义形状的角落

4
我想创建一个带有圆角的复合视图,看起来像这样:inset rounded corner 在Android中如何实现这一点?

你找到任何方法了吗? - hypd09
1
@hypd09,请看我在这里的答案https://dev59.com/r2HVa4cB1Zd3GeqPqtVn#24363561 - rstk
3个回答

2

如果有人遇到相同的问题,最好的方法是使用9.png图像。在xml中不可能实现。


1
您可以通过在自定义的drawable文件中使用<vector来实现这一点,在这里是invert_shape.xml:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="200dp"
    android:height="200dp"
    android:viewportWidth="400"
    android:viewportHeight="400">

    <path
        android:pathData="M3.146,256.500 L3.146,73.449 C41.770,72.388 72.757,41.041 72.757,2.500 L271.500,2.500 L271.500,256.500 L3.146,256.500 Z"
        android:fillColor="#eeffcc"
        android:strokeColor="#000000"
        android:strokeWidth="5"/>
</vector>

接下来,您需要将此 drawable 设置为您的 activity_main.xmlLinearLayoutandroid:background,如下所示:

 <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/linear_layout"
        android:background="@drawable/invert_shape"
        android:layout_centerInParent="true"
        android:orientation="horizontal" />

结果:

结果:

inverted corner

您可能会想知道如何在<vector中实现android:path,我使用了一个简单的解决方案。您可以使用像PhotoshopIllustrator这样的程序,在其中创建您的形状layer。完成后,右键单击layer并选择“Copy SVG”。现在,您已经复制了该形状,请将其粘贴到drawable(此处为invert_shape.xml)中的Android Studio中,您将获得来自您的Photoshop形状的android:pathandroid:stroke参数。去掉不必要的参数,并确保在XML本身中使用正确的属性。现在,您的创意没有尽头。干杯! :)

-3

您可以通过将以下框架设置为背景来为布局提供单侧角落。

    <?xml version="1.0" encoding="UTF-8"?>
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke 
        android:width="1dip" 
        />
    <solid 
        android:color="#3D2A1D"/>
    <corners 
        android:radius="20sp"
        android:topRightRadius="0dp"
        android:bottomLeftRadius="0dp"
        android:bottomRightRadius="0dp"/>

</shape>

我不确定负边框半径。


你可能没有理解我想做什么。也许是因为我的解释不够清晰=)在这张图片中,那个绿色的矩形带有一个角被切掉,它就是我的布局。 - rstk
@user1285670:是的,我明白了。我之前也尝试过,但没有内部圆角的情况。我的上面的代码可以处理单侧外部圆角。 - Shreyash Mahajan
这不是负角落,只是普通的角落而已。 - Mani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接