zoukankan      html  css  js  c++  java
  • 【转】【Android】Android Drawable Shape 组合画田字格

    使用layer-list组合多个Shap

    <?xml version="1.0" encoding="utf-8"?>
    
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <size
                    android:width="96dp"
                    android:height="96dp"></size>
                <stroke
                    android:width="1dp"
                    android:color="#FF0000" />
            </shape>
        </item>
        
        <item>
            <rotate
                android:fromDegrees="90"
                android:pivotX="50%"
                android:pivotY="50%"
                android:toDegrees="90">
                <shape android:shape="line">
                    <stroke
                        android:width="1dp"
                        android:color="#FF0000"
                        android:dashGap="3dp"
                        android:dashWidth="1dp" />
                </shape>
            </rotate>
        </item>
        
        <item>
            <shape android:shape="line">
                <stroke
                    android:width="1dp"
                    android:color="#FF0000"
                    android:dashGap="3dp"
                    android:dashWidth="1dp" />
            </shape>
        </item>
    </layer-list>

    上面的代码也很简单,使用了一个标签layer-list,中间套着多个item,每个item中加一个shape。

    上面的代码还有两点需要说一下:

    1、必须设置宽高,不然竖线只能画和宽度一样长。

    2、画竖线的方法就是横线加旋转。那个旋转的设置还是比较麻烦的。旋转的代码如下

    <rotate
                android:fromDegrees="90"
                android:pivotX="50%"
                android:pivotY="50%"
                android:toDegrees="90">
                <shape android:shape="line">
                    <stroke
                        android:width="1dp"
                        android:color="#FF0000"
                        android:dashGap="3dp"
                        android:dashWidth="1dp" />
                </shape>
            </rotate>

    下面介绍一下那四个属性

    android:fromDegrees="90"  开始的角度 
    android:toDegrees="90"      结束的角度

    开始和结束都是90度,就竖起来了

    android:pivotX="50%"   旋转中心点X座标,可以使用百分比设置
    android:pivotY="50%"   旋转中心点Y座标,可以使用百分比设置
    都设成50%就是在中心旋转。

    关于 Android Drawable shape 的更从介绍可以看文档:Android Drawable XML Documentation

    Shape使用总结

    在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的形状。

    首先我们了解一下Shape下面有哪些标签,都代表什么意思:

    solid:填充
    android:color指定填充的颜色

    gradient:渐变
    android:startColor和android:endColor分别为起始和结束颜色,

    android:angle是渐变角度,必须为45的整数倍。
    另外渐变默认的模式为android:type="linear",即线性渐变,

    可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。

    angle值对应的位置如图:

    stroke:描边
    android:width="2dp" 描边的宽度,android:color 描边的颜色。
    我们还可以把描边弄成虚线的形式,设置方式为:
    android:dashWidth="5dp" 
    android:dashGap="3dp"
    其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离

    corners:圆角
    android:radius为角的弧度,值越大角越圆。
    我们还可以把四个角设定成不同的角度,

    同时设置五个属性,则Radius属性无效

    android:Radius="20dp"                           设置四个角的半径

    android:topLeftRadius="20dp"              设置左上角的半径 
    android:topRightRadius="20dp"           设置右上角的半径 
    android:bottomLeftRadius="20dp"      设置右下角的半径 
    android:bottomRightRadius="20dp"    设置左下角的半径

    padding:间隔
    可以设置上下左右四个方向的间隔

    在这里我们来看一个简单的小例子,ShapDemo,在drawable文件夹下面先定义两个xml文件:

    button_bg.xml的内容如下:

    <span style="font-family:'Comic Sans MS';"><?xml version="1.0" encoding="utf-8"?>  
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
          
        <!-- 填充 -->  
        <solid android:color="#ff9d77" /> <!-- 定义填充的颜色值 -->  
          
        <!-- 描边 -->  
        <stroke  
            android:width="2dp"   
            android:color="#fad3cf" /> <!-- 定义描边的宽度和描边的颜色值 -->  
          
        <!-- 圆角 -->  
        <corners  
            android:bottomLeftRadius="5dp"  
            android:bottomRightRadius="5dp"  
            android:topLeftRadius="5dp"  
            android:topRightRadius="5dp" /> <!-- 设置四个角的半径 -->  
          
        <!-- 间隔 -->  
        <padding  
            android:bottom="10dp"  
            android:left="10dp"  
            android:right="10dp"  
            android:top="10dp" /> <!-- 设置各个方向的间隔 -->  
      
    </shape></span>  

    button_pressed_bg.xml的内容如下:

    <span style="font-family:'Comic Sans MS';"><?xml version="1.0" encoding="utf-8"?>  
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
      
        <!-- 渐变 -->  
        <gradient  
            android:endColor="#FFFFFF"  
            android:gradientRadius="50"  
            android:startColor="#ff8c00"  
            android:type="radial" />  
          
        <!-- 描边 -->  
        <stroke  
            android:dashGap="3dp"  
            android:dashWidth="5dp"  
            android:width="2dp"  
            android:color="#dcdcdc" />  
          
        <!-- 圆角 -->  
        <corners android:radius="5dp" />  
          
        <!-- 间隔  -->  
        <padding  
            android:bottom="10dp"  
            android:left="10dp"  
            android:right="10dp"  
            android:top="10dp" />  
      
    </shape></span>  

    这里说明一点,在描边里面设置了dash参数,使得图形的边变成了虚线。

    在drawable文件夹下添加一个selector选择器button.xml文件,内容如下:

    <span style="font-family:'Comic Sans MS';"><?xml version="1.0" encoding="utf-8"?>  
    <selector xmlns:android="http://schemas.android.com/apk/res/android">  
      
        <item android:drawable="@drawable/button_pressed_bg" android:state_pressed="true"></item>  
        <item android:drawable="@drawable/button_bg"></item>  
      
    </selector></span>  

    这个文件的意思以前讲过,normal(正常)情况下就显示button_bg,被press(按下)情况下就显示button_pressed_bg。

    我们再来看一下layout目录下的activity_main.xml的内容:

    <span style="font-family:'Comic Sans MS';"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        xmlns:tools="http://schemas.android.com/tools"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent" >  
      
        <Button  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:background="@drawable/button"  
            android:text="TestShapeButton" />  
      
    </RelativeLayout></span>  

    直接将background指定为drawable文件夹下的button.xml。

    程序运行截图如下:

    附上例子工程源码:

    Android中使用shape自定义形状

    原文地址:http://blog.csdn.net/do168/article/details/51879951

  • 相关阅读:
    drf 02 APIView的请求生命周期及各个模块源码分析和配置
    drf 03 序列化模块
    Django-restframework框架01
    javascript深入理解闭包(转)
    从经典问题来看 Copy 方法(转)
    JavaScript要点(七) 函数调用
    关于iOS中SQLITE句柄的使用的细节
    Xcode8 创建NSManageObject subclass方法
    JavaScript要点 (六) 函数参数
    JavaScript要点 (五) 函数定义
  • 原文地址:https://www.cnblogs.com/mqxs/p/8491559.html
Copyright © 2011-2022 走看看