美文网首页
由安卓圆角的延伸

由安卓圆角的延伸

作者: 小白猿 | 来源:发表于2017-07-03 20:30 被阅读652次

    因为在iOS中视图的切角是很容易的,包括边框的颜色,圆角的弧度等等很容易设置,但是在HS2.0中Android开发中多是用的图片作为背景,所以就百度了一番,是通过子在drawable目录下创建xml文件,通过不同的标签对边框,形状,填充颜色及渐变等等进行设置,再次做一下记录总结

    shape

    xml文件中顶层的标签时shape标签,

    • shape属性是控制形状的,其中可选值为
    • line --> 线
    • rectangle --> 矩形(圆角矩形)
    • oval --> 椭圆,圆
    • ring --> 圆环
    • userLevel
      在环形的时候要设置为false,其他情况下设置为true
    • ** innerRadiusRatio thicknessRatio**控制环形半径和环形宽度

    stroke

    stroke标签 用于控制变宽的颜色,宽度,以及连续性,即虚线和实线,其中属性值为

    • width --> 边框宽度
    • dashGap --> 虚线间隔宽度
    • dashWidth --> 虚线的实线宽度
    • color --> 颜色

    warn :当使用虚线的时候,引用此配置文件的布局,需要设置属性
    android:layerType="software",官方的解释要绘制虚线的时候,需要关闭硬件加速

    solid

    solid标签 主要是控制控件内部的填空颜色,主要属性为color来设置

    corner

    corner控制四个角的切角半径,主要通过以下属性进行设置

    • bottomLeftRadius -->左下角
    • bottomRightRadius --> 右下角
    • topLeftRadius --> 左上角
    • topRightRadius --> 右上角
    • 其中在Android3.0之前,Android:bottomLeftRadius与android:bottomRightRadius是相反的,即xxLeft是设置右边,xxRight是设置左边,但是在3.0之后此问题进行了修复,所以如果要兼容3.0的话需要注意这一点
    • 如果四角全切,且弧度一直,则可以将四个属性变为一个属性
      <corners android:radius="20dp" />
    • 半圆角:水平的半圆角只要半径等于高度的一半垂直的半圆角是半径等于宽度的一半

    gradient

    ** gradient标签**是改变颜色的渐变过程,其中以下几类

    • 线性渐变
      • type属性设置为linear
      • 通过改变angle 属性改变线性渐变的方向
        • -45 垂直渐变
        • 0 水平渐变
        • 45 对角渐变
    • 径向渐变
      • type属性设置为radial
      • angle 属性不再起作用,设置为0
      • 务必要设置gradientRadius属性,径向类似于圆形中心向外边辐射
    • 扫描渐变
      • type属性设置为sweep
      • angle 属性不再起作用,不能改变角度设置为0,
      • gradientRadius属性不起作用
      • 通过设置centerX属性centerY属性来改变角度, centerX,centerY是中心点的位置,这里用的是百分比值(0-1)

    实例

    ** 实线:line_solid.xml **

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 实线 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="line"
        android:useLevel="true">
    
    <stroke
        android:width="2dp"
        android:color="#ffff0000" />
    
    </shape>
    
    实线

    ** 虚线:line_dashed.xml **

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="line"
        android:useLevel="true">
    
        <stroke
            android:width="2dp"
            android:dashGap="5dp"
            android:dashWidth="10dp"
            android:color="#ffff0000" />
    </shape>
    
    虚线

    ** 矩形实线边框内部无填充:rect_solid_border.xml**

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 实线边框 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <stroke
            android:width="2dp"
            android:color="#ffff0000" />
    
    </shape>
    
    矩形实线无填充

    **矩形虚线边框内部无填充:rect_dashed_border.xml **

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 虚线边框 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <stroke
            android:width="2dp"
            android:color="#ffff0000"
            android:dashGap="5dp"
            android:dashWidth="10dp" />
    
    </shape>
    
    矩形虚线无填充

    矩形实线边框-内部填充:rect_solid_border_and_fill.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 实线边框+内部填充 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <stroke
            android:width="2dp"
            android:color="#ffff0000" />
    
        <solid android:color="#ff00ffff" />
    
    </shape>
    
    矩形实线填空

    矩形虚线边框-内部填充:rect_dashed_border_and_fill.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 虚线边框+内部填充 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <stroke
            android:width="2dp"
            android:color="#ffff0000"
            android:dashGap="5dp"
            android:dashWidth="10dp" />
    
        <solid android:color="#ff00ffff" />
    </shape>
    
    矩形虚线填充

    圆角矩形-只有边框:rect_rounded_border.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形边框圆角 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size android:height="100dp"
            android:width="100dp"/>
    
        <stroke
            android:width="2dp"
            android:color="#ffff0000" />
    
        <corners android:bottomLeftRadius="2dp"
            android:bottomRightRadius="2dp"
            android:topLeftRadius="2dp"
            android:topRightRadius="2dp" />
    
    </shape>
    
    圆角矩形无填充

    圆角矩形-只有内部填充:rect_rounded_fill.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆角矩形 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size android:height="100dp"
            android:width="100dp"/>
    
        <solid android:color="#8000ff00" />
    
        <corners android:bottomLeftRadius="2dp"
            android:bottomRightRadius="2dp"
            android:topLeftRadius="2dp"
            android:topRightRadius="2dp" />
    
    </shape>
    
    圆角矩形有填充

    圆角矩形-有边框有填充:rect_rounded_border_and_fill.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形边框+填充 圆角 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size android:height="100dp"
            android:width="100dp"/>
    
        <stroke
            android:width="2dp"
            android:color="#ffff0000" />
    
        <solid android:color="#8000ff00" />
    
        <corners android:bottomLeftRadius="2dp"
            android:bottomRightRadius="2dp"
            android:topLeftRadius="2dp"
            android:topRightRadius="2dp" />
    
    </shape>
    
    圆角矩形有填充有边框

    圆角矩形-左边圆角为一个半圆弧:rect_rounded_left_arc.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形圆角+左右两边为一个圆弧 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size
            android:width="50dp"
            android:height="10dp" />
    
        <solid android:color="#8000ff00" />
    
        <!-- 圆角半径是高度的一般就是一个圆弧了 -->
        <corners
            android:bottomLeftRadius="20dp"
            android:topLeftRadius="20dp" />
    
    </shape>
    
    左上做下半圆角

    圆角矩形-左右两边都是半圆弧:rect_rounded_left_right_arc.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形圆角+左右两边为一个圆弧 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size
            android:width="50dp"
            android:height="10dp" />
    
        <solid android:color="#8000ff00" />
    
        <!-- 圆角半径是高度的一般就是一个圆弧了 -->
        <corners android:radius="20dp" />
    
    </shape>
    
    左右双半圆

    圆角矩形-左右两边都是半圆弧-带边框:rect_rounded_left_right_arc_border.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形圆角+左右两边为一个圆弧 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size
            android:width="50dp"
            android:height="10dp" />
    
        <stroke android:color="#ffff0000"
            android:width="2dp"/>
    
        <solid android:color="#8000ff00" />
    
        <!-- 圆角半径是高度的一般就是一个圆弧了 -->
        <corners android:radius="20dp" />
    
    </shape>
    
    左右半圆有边框

    圆角矩形-圆:rect_rounded_arc.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形圆角+圆出一个圆弧 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size android:height="10dp"
            android:width="10dp"/>
    
        <solid android:color="#8000ff00" />
    
        <corners android:radius="20dp" />
    
    </shape>
    
    圆,上下左右都是半圆

    圆角矩形-上下两边半圆弧:rect_rounded_top_bottom_arc.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形圆角+左右两边为一个圆弧 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size
            android:width="10dp"
            android:height="60dp" />
    
        <solid android:color="#8000ff00" />
    
        <!-- 圆角半径是高度的一般就是一个圆弧了 -->
        <corners android:radius="10dp" />
    
    </shape>
    
    上下半圆

    ** 垂直线性渐变:rect_gradient_linear_vertical.xml**

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形内部填充-线性垂直渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size
            android:width="@dimen/shape_size"
            android:height="@dimen/shape_size" />
    
        <stroke
            android:width="1px"
            android:color="#ffff00ff" />
    
        <!-- 调整angle实现水平渐变,垂直渐变或者对角渐变 -->
        <gradient
            android:angle="-45"
            android:centerX="0.5"
            android:centerY="0.4"
            android:centerColor="#8000ff00"
            android:endColor="#1000ff00"
            android:startColor="#ff00ff00"
            android:type="linear" />
    </shape>
    
    垂直线性渐变

    水平线性渐变:rect_gradient_linear_horizon.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形内部填充-线性水平渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size
            android:width="@dimen/shape_size"
            android:height="@dimen/shape_size" />
    
        <stroke
            android:width="1px"
            android:color="#ffff00ff" />
    
        <!-- 调整angle实现水平渐变,垂直渐变或者对角渐变 -->
        <gradient
            android:angle="0"
            android:centerX="0.5"
            android:centerY="0.5"
            android:centerColor="#8000ff00"
            android:endColor="#ff00ff00"
            android:startColor="#1000ff00"
            android:type="linear" />
    </shape>
    
    水平线性渐变

    ** 对角线线性渐变:rect_gradient_linear_diagonal.xml **

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形内部填充-线性对角线渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size
            android:width="@dimen/shape_size"
            android:height="@dimen/shape_size" />
    
        <stroke
            android:width="1px"
            android:color="#ffff00ff" />
    
        <!-- 调整angle实现水平渐变,垂直渐变或者对角渐变 -->
        <gradient
            android:angle="45"
            android:centerX="0.5"
            android:centerY="0.5"
            android:centerColor="#8000ff00"
            android:endColor="#1000ff00"
            android:startColor="#ff00ff00"
            android:type="linear" />
    </shape>
    
    对角渐变

    径向渐变:rect_gradient_radial.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形内部填充-径向渐变,一般不用在rect上,用到圆或者椭圆上 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
    
        <size
            android:width="50dp"
            android:height="100dp" />
    
        <stroke
            android:width="1px"
            android:color="#ffff00ff" />
    
        <!-- 径向渐变angle无效 -->
        <gradient
            android:angle="0"
            android:centerX="0.5"
            android:centerY="0.5"
            android:startColor="#ffff00ff"
            android:endColor="#ff00ff00"
            android:gradientRadius="40dp"
            android:type="radial" />
    </shape>
    
    径向渐变

    ** 扫描渐变:rect_gradient_sweep.xml**

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 矩形内部填充-扫描渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        android:useLevel="true">
        <!--如果布局中没有设置View的大小,会size设置的大小为默认值-->
        <size
            android:width="20dp"
            android:height="20dp" />
    
        <stroke
            android:width="1px"
            android:color="#ffff00ff" />
    
        <!--调整angle不能实现角度变化
            centerX,centerY是中心点的位置,这里用的是百分比值(0-1)
            在rect中gradientRadius无效-->
        <gradient
            android:angle="0"
            android:centerX="0.5"
            android:centerY="0.5"
            android:startColor="#ff00ff00"
            android:endColor="#ffff00ff"
            android:gradientRadius="20dp"
            android:type="sweep" />
    </shape>
    
    扫描渐变

    圆-边框:circle_border.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆形边框 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval"
        android:useLevel="true">
    
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <stroke
            android:width="2dp"
            android:color="#ffff0000" />
    
    </shape>
    

    圆-填充:circle_fill.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆形边框 + 填充 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval"
        android:useLevel="true">
    
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <solid android:color="#800000ff" />
    
    </shape>
    
    圆形有边框

    圆-边框填充:circle_border_and_fill.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆形边框 + 填充 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval"
        android:useLevel="true">
    
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <stroke
            android:width="2dp"
            android:color="#ffff0000" />
    
        <solid android:color="#800000ff" />
    
    </shape>
    
    圆形边框有填充

    线性渐变:circle_gradient_linear.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆形内部填充-线性渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval"
        android:useLevel="true">
    
        <size
            android:width="@dimen/shape_size"
            android:height="@dimen/shape_size" />
    
        <!-- angle调整渐变角度,只能是45的倍数,centerX, centerY是百分百(0-1) -->
        <gradient
            android:angle="-90"
            android:centerX="0.5"
            android:centerY="0.8"
            android:centerColor="#80ff0000"
            android:endColor="#ffff0000"
            android:startColor="#00ff0000"
            android:type="linear" />
    
    </shape>
    
    圆形线性渐变

    径向渐变:circle_gradient_radial.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆形内部填充-径向渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval"
        android:useLevel="true">
    
        <size
            android:width="40dp"
            android:height="40dp" />
    
        <!-- centerX, centerY是百分百(0-1) -->
        <gradient
            android:centerX="0.5"
            android:centerY="0.5"
            android:startColor="#ffff0000"
            android:centerColor="#80ff0000"
            android:endColor="#10ff0000"
            android:gradientRadius="30dp"
            android:type="radial" />
    
    </shape>
    
    圆形径向渐变

    扫描渐变:circle_gradient_sweep.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆形内部填充-扫描渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval"
        android:useLevel="true">
    
        <size
            android:width="@dimen/shape_size"
            android:height="@dimen/shape_size" />
    
        <!-- sweep类型angle,gradientRadius无效,centerX, centerY是百分百(0-1) -->
        <gradient
            android:centerX="0.5"
            android:centerY="0.6"
            android:startColor="#ffff0000"
            android:centerColor="#80ff0000"
            android:endColor="#20ff0000"
            android:gradientRadius="20dp"
            android:type="sweep" />
    
    </shape>
    
    圆形扫描渐变

    椭圆的不在赘述,只要修改shape标签的shape属性为oval
    重点看一下环形


    环内填充:ring_fill.xml

    <?xml version="1.0" encoding="utf-8"?><!-- 圆环 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:innerRadiusRatio="4"
        android:shape="ring"
        android:thicknessRatio="4"
        android:useLevel="false">
        <!--android:useLevel="false"必须是false-->
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <solid android:color="#80ff0000" />
    
    </shape>
    
    环形

    ** 圆环边框:ring_border.xml **

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆环-仅有边框 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:innerRadius="20dp"
        android:shape="ring"
        android:thickness="16dp"
        android:useLevel="false">
        <!--android:useLevel="false"必须是false-->
    
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <stroke
            android:width="2dp"
            android:color="#ffff00ff" />
    </shape>
    
    无填充环形

    边框+填充:ring_border_and_fill.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆环 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:innerRadius="20dp"
        android:shape="ring"
        android:thickness="16dp"
        android:useLevel="false">
        <!--android:useLevel="false"必须是false-->
    
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <solid android:color="#80ff0000" />
    
        <stroke
            android:width="2dp"
            android:color="#ffff00ff" />
    </shape>
    
    填充有边框

    线性渐变:ring_gradient_linear.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆环-线性渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="ring"
        android:innerRadius="10dp"
        android:thickness="30dp"
        android:useLevel="false">
        <!--android:useLevel="false"必须是false-->
    
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <gradient
            android:angle="45"
            android:centerColor="#80ff0000"
            android:endColor="#ffff0000"
            android:startColor="#00ff0000"
            android:type="linear" />
    
    </shape>
    
    环形线性

    径向渐变:ring_gradient_radial.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆环-径向渐变渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="ring"
        android:innerRadius="10dp"
        android:thickness="30dp"
        android:useLevel="false">
        <!--android:useLevel="false"必须是false-->
    
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <!--设置径向渐变半径,渐变从圆心开始-->
        <gradient
            android:centerX="0.5"
            android:centerY="0.5"
            android:centerColor="#80ff0000"
            android:endColor="#00ff0000"
            android:startColor="#ffff0000"
            android:gradientRadius="40dp"
            android:type="radial" />
    
    </shape>
    
    环形径向渐变

    扫描渐变:ring_gradient_sweep.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 圆环-线性渐变 -->
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="ring"
        android:innerRadius="10dp"
        android:thickness="30dp"
        android:useLevel="false">
        <!--android:useLevel="false"必须是false-->
    
        <size
            android:width="80dp"
            android:height="80dp" />
    
        <!--扫描渐变shape不能设置角度-->
        <gradient
            android:centerColor="#80ff0000"
            android:endColor="#ffff0000"
            android:startColor="#00ff0000"
            android:type="sweep" />
    
    </shape>
    
    环形扫描渐变

    后记

    本文参考以及部分引用自文章Android XML shape 标签使用详解

    相关文章

      网友评论

          本文标题:由安卓圆角的延伸

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