美文网首页Android 技术收集我爱编程
Android开发中drawable定义之shape圆形背景

Android开发中drawable定义之shape圆形背景

作者: 大道至简_知易行难 | 来源:发表于2018-01-10 11:50 被阅读6091次

shape可以绘制矩形环形以及椭圆、所以只需要用椭圆就可以完成需求、在使用的时候将控件比如textview的高宽设置成一样就是正圆、solid表示远的填充色、stroke则代表圆的边框线、所以两者结合可以实现带边缘的圆。


33333.jpg
<? xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    android:useLevel="false">
    <solid android:color="@color/accent_material_light"></solid>
    <size
        android:width="15dp"
        android:height="15dp"></size>
    <padding
        android:bottom="1dp"
        android:left="2dp"
        android:right="2dp"
        android:top="1dp"></padding>
</shape>

用代码生成图片,而且图片能随意的更改,既方便又节省空间,下面就介绍用shape生成自定义图形的方法
步骤:

  1. 在res/drawable下新建一个xml文件;
  2. 在代码中引用这个xml文件,引用方式和图片一样。
    定义shape图形的语法如下:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"]      //共有4种类型,矩形(默认)/椭圆形/直线形/环形
    // 以下4个属性只有当类型为环形时才有效
    android:innerRadius="dimension"     //内环半径
    android:innerRadiusRatio="float"    //内环半径相对于环的宽度的比例,比如环的宽度为50,比例为2.5,那么内环半径为20
    android:thickness="dimension"   //环的厚度
    android:thicknessRatio="float"     //环的厚度相对于环的宽度的比例
    android:useLevel="boolean">    //如果当做是LevelListDrawable使用时值为true,否则为false.

    <corners    //定义圆角
        android:radius="dimension"      //全部的圆角半径
        android:topLeftRadius="dimension"   //左上角的圆角半径
        android:topRightRadius="dimension"  //右上角的圆角半径
        android:bottomLeftRadius="dimension"    //左下角的圆角半径
        android:bottomRightRadius="dimension" />    //右下角的圆角半径

    <gradient   //定义渐变效果
        android:type=["linear" | "radial" | "sweep"]    //共有3中渐变类型,线性渐变(默认)/放射渐变/扫描式渐变
        android:angle="integer"     //渐变角度,必须为45的倍数,0为从左到右,90为从上到下
        android:centerX="float"     //渐变中心X的相当位置,范围为0~1
        android:centerY="float"     //渐变中心Y的相当位置,范围为0~1
        android:startColor="color"      //渐变开始点的颜色
        android:centerColor="color"     //渐变中间点的颜色,在开始与结束点之间
        android:endColor="color"    //渐变结束点的颜色
        android:gradientRadius="float"  //渐变的半径,只有当渐变类型为radial时才能使用
        android:useLevel=["true" | "false"] />  //使用LevelListDrawable时就要设置为true。设为false时才有渐变效果

    <padding    //内部边距
        android:left="dimension"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension" />

    <size   //自定义的图形大小
        android:width="dimension"
        android:height="dimension" />

    <solid  //内部填充颜色
        android:color="color" />

    <stroke     //描边
        android:width="dimension"   //描边的宽度
        android:color="color"   //描边的颜色
        // 以下两个属性设置虚线
        android:dashWidth="dimension"   //虚线的宽度,值为0时是实线
        android:dashGap="dimension" />      //虚线的间隔
</shape>

下面是几个示例:

  1. 圆角矩形,扫描式渐变
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:useLevel="false" >

    <corners
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp"
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp" />

    <gradient
        android:type="sweep"
        android:endColor="@android:color/holo_blue_bright"
        android:startColor="@android:color/holo_green_dark"
        android:centerColor="@android:color/holo_blue_dark"
        android:useLevel="false" />

    <size android:width="60dp" android:height="60dp" />
</shape>
image
  1. 圆形,线性渐变
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    android:useLevel="false" >
    <gradient
        android:type="linear"
        android:angle="45"
        android:startColor="@android:color/holo_green_dark"
        android:centerColor="@android:color/holo_blue_dark"
        android:endColor="@android:color/holo_red_dark"
        android:useLevel="false" />

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

    <stroke android:width="1dp"
        android:color="@android:color/white" />
</shape>

结果:

[图片上传中...(image-51728f-1515556128274-0)]

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

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

    <stroke android:width="2dp"
        android:color="@android:color/holo_purple"
        android:dashWidth="10dp"
        android:dashGap="5dp" />
</shape>

结果:

image
  1. 环形,放射型渐变
<?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="40dp"
    android:thickness="3dp">

    <gradient android:type="radial"
        android:gradientRadius="150"
        android:centerY="0.1"
        android:centerX="0.2"
        android:startColor="@android:color/holo_red_dark"
        android:centerColor="@android:color/holo_green_dark"
        android:endColor="@android:color/white" />

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

</shape>

结果:

image

相关文章

网友评论

    本文标题:Android开发中drawable定义之shape圆形背景

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