美文网首页
Android Shape学习

Android Shape学习

作者: BrightLight | 来源:发表于2018-09-04 15:45 被阅读0次

在Android开发中,使用shape可以很方便的帮我们画出我们想要的背景,相对于png等图片来说,使用shape可以减少安装包大小,而且能够更好的适配不同的手机;

Shape属性 官网

下面是官网的示范

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape> 

<shape> 形状可绘制对象,这必须是根元素
xmlns:android="http://schemas.android.com/apk/res/android" ---->定义XML的命名空间
android:shape ---> 定义形状的类型,其有效值是:

描述 效果
android:shape="rectangle" 填充包含视图的矩形,这也是默认形状
android:shape="oval" 适应包含视图尺寸的椭圆形状,定义宽高后可称为圆形
android:shape="line" 跨越包含视图宽度的水平线。此形状需要<stroke>元素定义线宽,虚线和实线
android:shape="ring" 环形

注意:仅当 android:shape="ring" 时才能使用以下属性:
    1. android:innerRadius ---->尺寸,环内部(中间的孔)的半径
    2.android:innerRadiusRatio ---> 浮点型,环的厚度,以环宽度的比例表示。如android:innerRadiusRatio = "5",则内半径等于环宽度除以5,此值被android:innerRadius覆盖,默认值是9。
    3.android:thickness -->尺寸,环的厚度。
    4.android:thicknessRatio--->浮点型,环的厚度,表示为环宽度的比例,如android:thicknessRatio="2",则厚度等于宽度除以2,此值被android:innerRadius覆盖,默认值为3。
    5.android:useLevel--->布尔值,如果这用作LevelListDrawable,则此值为“true”。通常应为“false”,或者形状不会显示。

六个基本节点属性(corners、gradient、padding、size、solid、stroke)

1、<corners> : 为形状产生圆角,仅当android:shape="rectangle"时适用
corners节点下的属性和描述:

属性 描述
android:radius 尺寸。矩形四个角的半径,以尺寸值和尺寸资源(@dimens)表示,会被以下属性覆盖对应的位置。
android:topLeftRadius 尺寸。左上角的半径,以尺寸和尺寸资源表示
android:topRightRadius 尺寸。右上角的半径
android:bottomLeftRadius 尺寸。左下角的半径
androoid:bottomRightRight 尺寸。右下角的半径

注:(最初)必须为每个角提供大于1的角半径,否则无法产生圆角。如果希望特定角不要倒圆角,解决方法是使用android:radius设置大于1的默认角半径,然后使用实际所需的值替换每个角,为不希望倒圆角的角提供零(“0dp”)

2、<gradient> : 指定形状的渐变颜色
gradient的属性和描述

属性 描述
android:angle 整型。渐变的角度(读)。0为从左到右,90为从上到下,必须是45的倍数,默认为0
android:centerX 浮点型。渐变中心的相对X轴的位置(0 -- 1.0)
android:centerY 浮点型。渐变中心的相对Y轴的位置(0 -- 1.0)
android:centerColor 颜色。起始颜色与结束颜色之间的可选颜色,以十六进制或颜色资源表示
android:startColor 起始颜色
android:endColor 结束颜色
android:gradientRadius 渐变的半径。仅在android:type="radial时适用
android:type 关键字。要应用的渐变图案的类型
android:useLevel 布尔值。如果这用作LevelListDrawable,则此值为"true"
android:type关键字说明
说明
android:type="linear" 线性渐变。这是默认值
android:type="radial" 径向渐变。起始颜色为中心颜色
android:type="sweep" 流线型渐变

3、<padding> : 要应用到包含视图元素的内边距(这会填充视图内容的位置,而非形状)
padding的属性和描述

属性 描述
android:left 左内边距
android:top 上内边距
android:right 右内边距
android:bottom 下内边距

4、<size> : 形状的大小
size的属性和描述

属性 描述
android:height 形状的高度
androud:width 形状的宽度

5、<solid> : 用于填充形状的纯色
solid的属性和描述

属性 描述
android:color 颜色。应用于填充形状的颜色

6、<stroke> : 形状的笔画中线
stroke的属性和描述

属性 描述
android:width 尺寸,线的宽度
android:color 颜色。线的颜色
android:dashGap 尺寸。短划线的间距,仅设置了android:dashWidth有效
android:dashWidth 尺寸。每个短划线的大小,仅在设置了android:dashGap有效

示例

1.新建Shape文件

首先在res/drawable文件夹下,new --> Drawable resource file ,新建一个文件,命名为:shape_bg.xml(名称随意,自己定,理解就行),注意Root element选择为shape:

内容:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

2.XML布局中将shape应用到视图中

既然定义了shape文件,肯定就要使用,下面将其设置为TextView的背景

    <TextView
    android:background="@drawable/shape_bg"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" 
    android:id="@+id/textview"/>
代码获取Shape,并应用到视图中:
Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);

相关文章

    本文标题:Android Shape学习

    本文链接:https://www.haomeiwen.com/subject/grkgwftx.html