Android - 如何制作像纸标签一样的内圆角?

Android - how to make inner rounded corner like a paper tag?

我想画下图,但我对如何做我放在橙色的开始区域感到困惑。我希望它是圆形的,但如果你从照片中明白我的意思的话,它是一个内圈。我尝试使用这样的负半径:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
  <solid android:color="@color/my_green" />
  <corners android:radius="-24dp" />
</shape>

但这没有任何作用。这是如何实现的?

p.s不一定是橙色也可以是同一种颜色我只是想强调这个问题。

您可以通过在自定义 drawable 文件中使用 <vector 来实现,此处 invert_shape.xml:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="200dp"
    android:height="100dp"
    android:viewportWidth="359.5"
    android:viewportHeight="196.0">
    <path
        android:pathData="M-0.000,0.000 C108.667,0.000 217.333,0.000 326.000,0.000 C326.000,32.000 326.000,64.000 326.000,96.000 C217.333,96.000 108.667,96.000 -0.000,96.000 C46.617,64.186 37.267,32.149 -0.000,0.000 Z"
        android:fillColor="#2962FF"/>
</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" />

结果:

您可能会问自己如何在 <vector 中实现 android:path,我为此使用了一个简单的解决方案。您可以使用 PhotoshopIllustrator 等程序并在 layer 中创建您的形状。如果您这样做了,请右键单击您的 layer 和 select“Copy SVG”。现在您复制了形状,将其粘贴到 Android Studio 中的 drawable(此处为 invert_shape.xml),您将获得 photoshop 形状的 android:pathandroid:stroke 等参数.现在,您的创造力永无止境。干杯! :)

我使用了一个包含两个可绘制对象的图层列表。制作一个圆形的白色可绘制对象。只需将可绘制对象移动一点并确保其为纯白色。它会产生如上的效果。