简体   繁体   English

使用XML在android中自定义形状

[英]Custom shape in android using xml

I am trying to draw a custom shape which I can use as a background for my layout. 我正在尝试绘制自定义形状,可以将其用作布局的背景。 But I am not able to do so. 但是我不能这样做。 Is it possible to draw a shape as below using xml in android. 是否可以在android中使用xml绘制如下形状。 I am not getting how to cut the semicircle shape from the vertical centres of rectangle. 我不知道如何从矩形的垂直中心切出半圆形。

在此处输入图片说明

Use layer-list to make this custom shape drawable . 使用layer-list使此自定义形状drawable

/res/drawable/custom_shape.xml: /res/drawable/custom_shape.xml:

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

    <!-- Transparent Rectangle -->
    <item>
        <shape android:shape="rectangle">
            <corners
                android:topLeftRadius="8dp"
                android:topRightRadius="8dp"
                android:bottomLeftRadius="4dp"
                android:bottomRightRadius="4dp" />

            <size
                android:width="300dp"
                android:height="100dp" />
            <solid android:color="#FFFFFF" />
        </shape>
    </item>

    <!-- Left Half-Circle -->
    <item
        android:left="-10dp"
        android:right="290dp"
        android:top="40dp"
        android:bottom="40dp">
        <shape android:shape="oval">
            <solid android:color="#000000" />
        </shape>
    </item>

    <!-- Right Half-Circle -->
    <item
        android:left="290dp"
        android:right="-10dp"
        android:top="40dp"
        android:bottom="40dp">
        <shape android:shape="oval">
            <solid android:color="#000000" />
        </shape>
    </item>

    <!-- Middle Dotted Line -->
    <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="line">
            <stroke
                android:width="1dp"
                android:dashWidth="10px"
                android:dashGap="10px"
                android:color="#ff00"/>

        </shape>
    </item>

</layer-list>

USE: 采用:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/custom_shape"/>

OUTPUT: OUTPUT:

在此处输入图片说明

Hope this will help~ 希望这会有所帮助〜

try bellow xml. 尝试下面的XML。 save it in drawable. 将其保存在drawable中。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:topLeftRadius="15dp"
android:topRightRadius="15dp"
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
/>
<solid
android:color="#ffffff"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>

<stroke
android:width="1dp"
android:color="#000000"
/>
</shape>

In your case it might be worth to create a resizable bitmap ( 9-Patch drawable). 在您的情况下,可能值得创建可调整大小的位图( 9-Patch可绘制)。 Follow this guide. 请遵循指南。

It is better to use 9-Patch images. 最好使用9补丁图像。 If you can create an image like above you can use https://romannurik.github.io/AndroidAssetStudio/nine-patches.html to create 9-patch image(define expandable area). 如果您可以像上面一样创建图像,则可以使用https://romannurik.github.io/AndroidAssetStudio/nine-patches.html创建9补丁图像(定义可扩展区域)。

Try this xml file in drawable : 试试这个XML文件在drawable中:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape= "rectangle">
<solid android:color="@color/primary" />
<corners android:radius="50dp"/>
</shape>

Please refer the below xml, it may help you out 请参考下面的xml,它可能对您有帮助

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/black" />
        </shape>
    </item>
    <item
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp">
        <shape android:shape="rectangle">
            <size
                android:width="200dp"
                android:height="200dp" />
            <solid android:color="@color/colorAccent" />
            <corners android:radius="5dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="line">
            <solid android:color="@android:color/black" />
            <stroke android:width="1dp"
                android:dashWidth="10px"
                android:dashGap="10px"/>
        </shape>
    </item>
    <item
        android:bottom="103dp"
        android:left="-10dp"
        android:right="205dp"
        android:top="103dp">
        <shape android:shape="oval">
            <size
                android:width="3dp"
                android:height="3dp" />
            <solid android:color="@android:color/black" />
            <stroke android:width="1dp" />
        </shape>
    </item>

    <item
        android:bottom="103dp"
        android:left="205dp"
        android:right="-10dp"
        android:top="103dp">
        <shape android:shape="oval">
            <size
                android:width="3dp"
                android:height="3dp" />
            <solid android:color="@android:color/black" />
            <stroke android:width="1dp" />
        </shape>
    </item>
</layer-list>

Try below code 试试下面的代码

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

        <solid android:color="#FFFFFF" />
        <corners android:radius="3dip" />
        <stroke
            android:width="1dp"
            android:color="#ED2A3C" /> 
    </shape> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM