如何创建半椭圆形状(弯曲一条线)

时间:2017-07-13 14:12:37

标签: android xml drawable shape

我尝试为NavigationView页脚创建自定义形状作为背景。但它不那么干净。这就是我所做的:

enter image description here

这就是我需要的:

enter image description here

代码:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:gravity="bottom">
    <shape android:shape="rectangle">
        <solid android:color="@color/darkerGray" />
    </shape>
</item>
<item

    android:gravity="bottom|center_horizontal"
    android:top="50dp">
    <!--android:top="-40dp"-->

    <shape android:shape="oval">
        <solid android:color="#ffffffff" />
    </shape>
</item>
<item

    android:bottom="30dp"
    android:gravity="bottom">
    <shape android:shape="rectangle">
        <solid android:color="#ffffffff" />
    </shape>
</item>

请帮帮我吗?

2 个答案:

答案 0 :(得分:6)

<强>#。更新您的自定义drawable XML,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Container GRAY rectangle -->
    <item>
        <shape android:shape="rectangle">

            <size
                android:width="250dp"
                android:height="100dp" />

            <solid
                android:color="@android:color/darker_gray" />
        </shape>
    </item>

    <!-- Top WHITE oval shape -->
    <item
        android:left="-25dp"
        android:right="-25dp"
        android:top="-50dp"
        android:bottom="50dp">

        <shape android:shape="oval">

            <solid
                android:color="@android:color/white" />
        </shape>
    </item>
</layer-list>

预览

enter image description here

<强>#。在您的布局中使用此自定义drawable,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:background="@android:color/black"
    android:padding="16dp">

    <!-- Custom Footer -->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/custom_shape">

    </LinearLayout>
</LinearLayout>

<强>输出:

enter image description here

希望这会有所帮助〜

答案 1 :(得分:4)

我会使用vector drawable来实现这一点。

<vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="8dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">

    <path
        android:pathData="M0 -5.4a13 7 0 1 0 24 0V24H0z"
        android:fillColor="#FF000000"/>

</vector>

此处的pathData属性相对简单:

  • 将光标移动到左上角
  • 转到右上角
  • 排到右下角
  • 划线到左下角
  • 关闭路径

您可以通过摆弄&#34; a&#34;之后的前两个数字来调整曲线的外观(它的深度)。 (即a13 7);这些是x半径和y半径。较大的x半径将使曲线整体变得更平坦,更大的y半径将使曲线进一步向下进入正方形。

路径从负y轴值开始,因为我们(当前)使用的x半径大于我们形状的一半,所以需要调整弧以便它首次出现时点击(0,0)。因此,如果修改x半径,则还必须修改路径的原点(初始&#34; M&#34;之后的数字,即M0 -5.4)。

enter image description here