圆形内角,内部透明框架

时间:2012-06-27 10:45:45

标签: android

我正在尝试从代码中制作一个框架,以便我可以应用它来制作圆形内角,外部有一个实心填充,内部是透明的。 就像一个内部带有透明椭圆的实心矩形。 图片附加。我尝试了几种形状组合,所有可用的在线显示外面的角落。

enter image description here

内部应透明而不是白色。 图像取自post,但此处提供的解决方案不是我想要的,我不想使用9补丁可绘制但希望在代码中创建。

请仅提供有效答案。

4 个答案:

答案 0 :(得分:45)

创建以下rounded_corner.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="-10dp"
        android:left="-10dp"
        android:right="-10dp"
        android:top="-10dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="10dp"
                android:color="#ffffff" />
            <corners android:radius="20dp" />
        </shape>
    </item>
</layer-list>

在imageView下方添加此项,您要在其上应用框架:

<View
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignBottom="@+id/my_image_view"
    android:layout_alignLeft="@id/my_image_view"
    android:layout_alignRight="@+id/my_image_view"
    android:layout_alignTop="@id/my_image_view"
    android:background="@drawable/rounded_corner" />

答案 1 :(得分:22)

首先,在drawable文件夹中创建3 xml layout

  1. 首先: frame.xml
  2. 第二名: frame_build.xml
  3. 第三名: red.xml
  4. (您可以根据需要更改此名称),

    <强> frame.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:bottom="20dp" android:drawable="@drawable/red" android:top="-25dp" />
        <item android:bottom="15dp" android:drawable="@drawable/frame_build" android:top="5dp" android:left="-5dp" android:right="-5dp" />
    </layer-list>
    

    frame_build.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
        <corners android:radius="40dp" />
    </shape>
    

    <强> red.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <stroke android:width="40dp" android:height="40dp" android:color="#B22222" />
        <padding android:left="8dp" android:top="-1dp" android:right="8dp" android:bottom="9dp" />
        <corners android:radius="-10dp" />
    </shape>
    

    最后将您的视图或布局引用到Frame XML,如下所示:

      android:background="@drawable/frame"
    

    测试并输出如下图像:

    Output image

    希望得到这个帮助。

答案 2 :(得分:2)

调整@Nima K解决方案,以避免使用额外的View

创建frame.xml @ drawable

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

    <item
        android:bottom="-10dp"
        android:left="-10dp"
        android:right="-10dp"
        android:top="-10dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="20dp"
                android:color="@color/frame_color" />
            <corners android:radius="30dp" />
        </shape>
    </item>

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

            <stroke
                android:width="20dp"
                android:color="@color/frame_color" />

            <corners android:radius="40dp" />
        </shape>

    </item>

</layer-list>

然后将其与视图的“drawable”属性一起使用

<TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/frame" />

And this is the result

enter image description here

答案 3 :(得分:0)

也许更简单;

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="-6dp">

    <shape android:shape="rectangle">
        <solid android:color="#FFFFFF" />

        <stroke android:width="12dp"
            android:color="#000000" />
    
        <corners android:radius="16dp" />
    </shape>
</inset>