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.xml
中 LinearLayout
的 android: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
,我为此使用了一个简单的解决方案。您可以使用 Photoshop
或 Illustrator
等程序并在 layer
中创建您的形状。如果您这样做了,请右键单击您的 layer
和 select“Copy SVG
”。现在您复制了形状,将其粘贴到 Android Studio
中的 drawable
(此处为 invert_shape.xml
),您将获得 photoshop 形状的 android:path
和 android:stroke
等参数.现在,您的创造力永无止境。干杯! :)
我使用了一个包含两个可绘制对象的图层列表。制作一个圆形的白色可绘制对象。只需将可绘制对象移动一点并确保其为纯白色。它会产生如上的效果。
我想画下图,但我对如何做我放在橙色的开始区域感到困惑。我希望它是圆形的,但如果你从照片中明白我的意思的话,它是一个内圈。我尝试使用这样的负半径:
<?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.xml
中 LinearLayout
的 android: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
,我为此使用了一个简单的解决方案。您可以使用 Photoshop
或 Illustrator
等程序并在 layer
中创建您的形状。如果您这样做了,请右键单击您的 layer
和 select“Copy SVG
”。现在您复制了形状,将其粘贴到 Android Studio
中的 drawable
(此处为 invert_shape.xml
),您将获得 photoshop 形状的 android:path
和 android:stroke
等参数.现在,您的创造力永无止境。干杯! :)
我使用了一个包含两个可绘制对象的图层列表。制作一个圆形的白色可绘制对象。只需将可绘制对象移动一点并确保其为纯白色。它会产生如上的效果。