形状图形(shape)

shape 常用属性

android:shape="rectangle" 矩形,默认值
android:shape="oval" 椭圆,此时corners (圆角节点)失效
android:shape="line" 直线,必须设置stroke(描边)节点
android:shape="ring" 圆环

下面定义了6种图形

  • corners (圆角)

    android:radius="20dp" 直接定义4个圆角
    android:bottomLeftRadius="20dp" 左下角
    android:bottomRightRadius="20dp" 右下角
    android:topLeftRadius="20dp" 左上角
    android:topRightRadius="20dp" 右上角
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--圆角 弧度为 20-->
    <corners android:radius="20dp"
        android:bottomLeftRadius="20dp"
        android:bottomRightRadius="20dp"
        android:topLeftRadius="20dp"
        android:topRightRadius="20dp"/>
  <!--填充颜色-->
    <solid android:color="@color/white_alpha_32" />

</shape>
image.png
  • gradien(渐变)

android:angle ( 起始角度 0 -9点方向 90- 6点方向 180 -3点方向 270 12点方向)
android:type (linear 线性渐变 默认值 , radial 放射渐变 起始颜色是圆心, sweep 滚动渐变)
android:centerY="0.4" 圆心y坐标

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

    <gradient
        android:angle="270"
        android:centerY="0.4"
        android:startColor="@color/black_alpha_224"
        android:centerColor="@color/black_alpha_80"
        android:endColor="@color/trans"
        />

</shape>

image.png
  • padding (定义内容离边界的距离)

  • solid(填充颜色,背景色)

 <solid android:color="@color/white_alpha_32" />
  • size(尺寸)

无节点表示宽高自适应

<size android:height="@dimen/len_4"
        android:width="@dimen/len_4"/>

  • stroke(描边)

android:dashGap="@dimen/len_4" 每段虚线之间的间隔
android:dashWidth="@dimen/len_4" 每段虚线之间的宽度
上面2个同时存在才为虚线
android:width="@dimen/len_4" 描边厚度

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

    <stroke android:color="@color/black"
        android:width="@dimen/len_2"
        />

    <corners android:radius="20dp"/>

    <size android:width="400dp"
        android:height="400dp"/>
</shape>

image.png
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--圆角 弧度为 20-->
    <corners android:radius="20dp" />
    <solid android:color="@color/white_alpha_32" />
</shape>

v21 涟漪效果

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/white_alpha_48">

    <!--涟漪  效果 api 21-->
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <corners android:radius="20dp" />
            <solid android:color="@color/white" />
        </shape>
    </item>
</ripple>
v21 以上 
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/black_alpha_32"/>

v21 以下
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/black_alpha_16" />
        </shape>
    </item>
</selector>

进阶

点击背景 实现变色

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

    <item android:state_enabled="false">

        <shape android:shape="rectangle">
            <corners android:radius="22dp" />
            <solid android:color="@color/trans" />
        </shape>
    </item>

   <!--点击时的效果 -->
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="22dp" />
            <solid android:color="@color/black_alpha_112" />
        </shape>
    </item>
</selector>

推荐阅读更多精彩内容

  • ANDROID样式的开发:SHAPE篇 转载自Keegan小钢并标明原文链接:http://keeganlee.m...
    一点墨汁阅读 489评论 0 1
  • 原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/a...
    于加泽阅读 1,305评论 0 5
  • 概述 今天我们来探究一下android的样式。其实,几乎所有的控件都可以使用 background属性去引用自定义...
    CokeNello阅读 3,886评论 1 18
  • 记得刚开始学Android时,看着自己完全用系统控件写出的不忍直视的界面,对于如何做出不一样的按钮,让它们在不同状...
    biloba阅读 1,238评论 1 11
  • 关于Shape的使用,简单来说说吧,shape作为Android程序员你也是一定会用到的一个工具。用官方的话来说,...
    Joney小鬼阅读 9,080评论 0 4
  • 女排夺冠,奥运闭幕。偌大的盛会结束得那么突然,16天,好短。 不瞒你说,这届奥运真的不一样。好像傅园慧粗线了之后一...
    扇喜花阅读 181评论 0 0
  • 孤单的心事
    幸运的贝壳阅读 102评论 0 0
  • 老周家住在廿四里殡仪馆附近,这天路过殡仪馆门口的时候,看到地上有一个手机,捡起来后,发现还是个品牌新机,一看就...
    依旧爱脸红的我阅读 151评论 0 0
  • 就先涂这几片叶子吧,听完指导再接着上色。我怕涂太多被我涂残了,不好改了... 还有那根长长的水草涂得这么生硬还有挽...
    Mikachu阅读 57评论 1 0
  • 人的一辈子很短。今天的我正在度过47岁生日,我很宁静。 姆妈进入腊月就开始和我说,乖,生日快到了。嗯,我晓得咯,快...
    二狗狗子阅读 199评论 3 5