Android开发

Android你必懂的-Shape篇

2018-03-29  本文已影响231人  码码Master

关于Shape的使用,简单来说说吧,
shape作为Android程序员你也是一定会用到的一个工具。
用官方的话来说,这是在 XML 中定义的一般形状。指向 GradientDrawable 的资源指针。

Shape可以绘制几种图形:

我们用到的属性

矩形(rectangle)

image

就像上图一样,我们可以弄出这一类甚至更多(颜色我是用的新建项目自带的,难看,吐槽我比较懒吧- 。-),我们是通过如下方式弄成的

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--定义颜色-->
    <solid android:color="@color/colorAccent" />
</shape>
 <solid android:color="@color/colorAccent" />
    <corners android:radius="5dp" />
<solid android:color="@color/colorAccent" />
    <corners android:radius="10dp" />
 <solid android:color="@color/colorAccent" />
    <padding android:right="20dp"
        android:top="20dp"/>
<solid android:color="@color/colorAccent" />
    <corners
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />
 <solid android:color="@color/colorAccent" />
    <corners
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />

    <stroke
        android:width="2dp"
        android:color="@color/colorPrimary" />
<solid android:color="@color/colorAccent" />

    <stroke
        android:width="2dp"
        android:color="@color/colorPrimary"
        android:dashGap="1dp"
        android:dashWidth="2dp" />
<solid android:color="@color/colorAccent" />

    <gradient
        android:centerColor="@color/colorAccent"
        android:centerX="0.2"
        android:centerY="0.5"
        android:endColor="@color/colorPrimary"
        android:startColor="@color/colorPrimary" />

圆形(oval)

矩形就是在最外层设置android:shape="oval"

image

如5:

<size
        android:width="20dp"
        android:height="20dp" />

    <gradient
        android:centerColor="@color/colorAccent"
        android:centerX="0.2"
        android:centerY="0.5"
        android:gradientRadius="10dp"
        android:endColor="@color/colorPrimary"
        android:startColor="@color/colorPrimary"
        android:type="radial" />

线条(line)

线条就是shape设置为line,就和前面说的一样,此形状需要 <stroke> 元素定义线宽,主要是用做分割线。

line主要依靠size和stroke属性来控制。

image

例如第二条线xml:

<size
        android:width="100dp"
        android:height="2dp" />
    <stroke
        android:width="2dp"
        android:color="@color/colorAccent"
        android:dashGap="2dp"
        android:dashWidth="1dp" />

注:1.如果size宽不设置(高不用设置,高度依靠stroke的width控制),那么view控件宽度为wrap_content的话会不显示哦。因为view宽度就没了,自然也就看不见了

环(ring)

对于环,能看到有一些属性是单独针对它的(设置位置跟shape=ring同级):

image
  1. 第一个就只有size和solid
  2. 第二个设置了android:innerRadius="5dp"
    android:thickness="1dp",看起来小了许多
  3. 第三个就只设置了gradient
  4. 第四个只设置了stroke
  5. 第五个设置了stoke和gradient

如第2个:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:useLevel="false"
    android:innerRadius="5dp"
    android:thickness="1dp">
    <size
        android:width="30dp"
        android:height="30dp" />
    <solid android:color="@color/colorAccent" />
</shape>

注:和oval一样的,如果不设置size,修饰的view需要设置宽高,否则不会显示哦,不过在设置了stroke的时候,可以不用设置size

shape大概就这么多,咱们可以通过shape来给各个控件设置背景,用这几种来选择已经能满足大部分需求。shape还能被其他组合使用比如selector里放到item中,来完成点击/焦点/选中效果切换等

上一篇 下一篇

猜你喜欢

热点阅读