【问题标题】:Creating a rectangle shape with only two rounded edges创建一个只有两个圆角的矩形
【发布时间】:2010-10-14 15:50:35
【问题描述】:

我可以创建一个所有边都是圆角的矩形。但是,我想要的是一个矩形,只有 2 个边缘是圆形的。这可能吗?

我实际上是在拼凑一个看起来像带有圆边的气泡的 ListView。我希望添加一个顶部边缘为圆形的页眉和两个底部边缘为圆形的页脚。

【问题讨论】:

    标签: android shape


    【解决方案1】:
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
    <solid android:color="#FFFFFF"/>
    <corners 
    android:bottomRightRadius="0dp"
    android:bottomLeftRadius="0dp"
    android:topLeftRadius="15dp"
    android:topRightRadius="15dp"/>
    </shape>
    

    此代码仅在 Android 版本 2.2 上运行(自?)。参考documentation,代码应如下所示:

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
    <solid android:color="#FFFFFF"/>
    <corners 
    android:radius="2dp"
    android:bottomRightRadius="0dp"
    android:bottomLeftRadius="0dp"
    android:topLeftRadius="15dp"
    android:topRightRadius="15dp"/>
    </shape>
    

    【讨论】:

    • 在我的例子中,它没有在 xml 编辑器中正确显示。运行您的代码以正确查看它。
    • 对我来说,似乎 xml 编辑器不尊重不同半径的角。
    【解决方案2】:

    您可能会发现这很有帮助。

    <?xml version="1.0" encoding="utf-8"?>
    <!--  res/drawable/rounded_edittext.xml -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
     <solid android:color="#FFFFFF"/>
        <corners
         android:bottomRightRadius="0dp"
         android:bottomLeftRadius="0dp"
      android:topLeftRadius="15dp"
      android:topRightRadius="15dp"/>
    </shape>
    

    【讨论】:

    • shape中没有padding属性
    【解决方案3】:

    我将android:radius 属性更改为android:topRightRadiusandroid:topLeftRadius

    【讨论】:

      【解决方案4】:

      我认为最好的(据我对您的问题的理解)是创建一个 9patch 图像并将其用作背景 - 可以根据需要定义为拉伸并在 XML 级别设置以节省一些代码工作

      【讨论】:

        【解决方案5】:
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle" android:padding="10dp">
        <solid android:color="#FFFFFF"/>
        <corners 
        android:bottomRightRadius="0dp"
        android:bottomLeftRadius="0dp"
        android:topLeftRadius="15dp"
        android:topRightRadius="15dp"/>
        </shape>
        

        使用上面的代码

        【讨论】:

          【解决方案6】:

          我会尝试绘制一个圆角矩形,然后再画两个与圆角矩形的圆角半径相同大小的矩形,并将它们放在您不想被圆角的角上。

          例如,一个半径为 15px 的圆角矩形,和两个 15x15px 的常规矩形,放置在不应圆角的圆角矩形的角上。

          编辑:重新阅读您的问题,您最好为列表视图的顶部和底部制作一个简单的 9 补丁图像。它们可以在没有像素化的情况下以这种方式拉伸到任何尺寸。不过,这将要求您事先创建图像,并且使用矩形进行操作会更容易在以后的代码中进行修改。然而,9-patch 的方式会少一些 hack。

          【讨论】:

          • ...plus:您不仅需要绘制一个九色块,还需要绘制各种覆盖不同屏幕密度的色块。这使得它比必要的复杂。我更喜欢在代码中执行此操作,并根据矩形的大小调整圆的半径(以像素为单位)。
          【解决方案7】:

          画一个圆角矩形,然后用相同颜色在圆角矩形上画一个普通矩形。

          【讨论】:

            猜你喜欢
            • 2015-06-19
            • 1970-01-01
            • 2011-08-10
            • 2016-04-14
            • 2015-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-22
            相关资源
            最近更新 更多