天天看点

Android开发:shape和selector和layer-list的(详细说明)

<shape>和<selector>在android ui设计中经常用到。比如我们要自定义一个圆角button,点击button有些效果的变化,就要用到<shape>和<selector>。

可以这样说,<shape>和<selector>在美化控件中的作用是至关重要。

作用:xml中定义的几何形状 位置:res/drawable/文件的名称.xml
java代码中:r.drawable.文件的名称 xml中:android:background="@drawable/文件的名称"
<shape>  android:shape=["rectangle" | "oval" | "line" | "ring"] 其中rectagle矩形,oval椭圆,line水平直线,ring环形 <shape>中子节点的常用属性: <gradient>  渐变 android:startcolor   起始颜色 android:endcolor   结束颜色              android:angle   渐变角度,0从左到右,90表示从下到上,数值为45的整数倍,默认为0; android:type   渐变的样式 liner线性渐变 radial环形渐变 sweep <solid >  填充 android:color   填充的颜色 <stroke >描边 android:width  描边的宽度 android:color  描边的颜色 android:dashwidth  表示'-'横线的宽度 android:dashgap  表示'-'横线之间的距离 <corners >圆角 android:radius   圆角的半径 值越大角越圆 android:toprightradius   右上圆角半径 android:bottomleftradius  右下圆角角半径 android:topleftradius  左上圆角半径 android:bottomrightradius  左下圆角半径 <padding >填充 android:bottom="1.0dip"  底部填充 android:left="1.0dip"  左边填充 android:right="1.0dip"  右边填充 android:top="0.0dip"  上面填充
根据不同的选定状态来定义不同的现实效果 分为四大属性: android:state_selected 是选中 android:state_focused 是获得焦点 android:state_pressed 是点击 android:state_enabled 是设置是否响应事件,指所有事件 另: android:state_window_focused 默认时的背景图片 引用位置:res/drawable/文件的名称.xml
Android开发:shape和selector和layer-list的(详细说明)
<?xml version="1.0" encoding="utf-8" ?>        <selector xmlns:android="http://schemas.android.com/apk/res/android">      <!-- 默认时的背景图片-->       <item android:drawable="@drawable/pic1" />         <!-- 没有焦点时的背景图片 -->       <item       android:state_window_focused="false"            android:drawable="@drawable/pic_blue"       />        <!-- 非触摸模式下获得焦点并单击时的背景图片 -->          android:state_focused="true"       android:state_pressed="true"         android:drawable= "@drawable/pic_red"       />      <!-- 触摸模式下单击时的背景图片-->          android:state_focused="false"       android:drawable="@drawable/pic_pink"       />       <!--选中时的图片背景-->          android:state_selected="true"       android:drawable="@drawable/pic_orange"    <!--获得焦点时的图片背景-->          android:drawable="@drawable/pic_green"    </selector>   
将多个图片或上面两种效果按照顺序层叠起来
Android开发:shape和selector和layer-list的(详细说明)

<?xml version="1.0" encoding="utf-8"?>  

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  

    <item>  

      <bitmap android:src="@drawable/android_red"  

        android:gravity="center" />  

    </item>  

    <item android:top="10dp" android:left="10dp">  

      <bitmap android:src="@drawable/android_green"  

    <item android:top="20dp" android:left="20dp">  

      <bitmap android:src="@drawable/android_blue"  

</layer-list>  

Android开发:shape和selector和layer-list的(详细说明)

<imageview  

    android:layout_height="wrap_content"  

    android:layout_width="wrap_content"  

    android:src="@drawable/layers" />  

效果图:

Android开发:shape和selector和layer-list的(详细说明)

以上三个标签可以揉合到一块儿来使用,所要实现的效果就是上面三种标签的说明,比如下面这个例子:

Android开发:shape和selector和layer-list的(详细说明)

<selector xmlns:android="http://schemas.android.com/apk/res/android">  

    <item android:state_pressed="true">  

        <layer-list>  

            <item android:bottom="8.0dip">  

                <shape>  

                    <solid android:color="#ffaaaaaa" />  

                </shape>  

            </item>  

            <item>  

                    <corners android:bottomleftradius="4.0dip" android:bottomrightradius="4.0dip" android:topleftradius="1.0dip" android:toprightradius="1.0dip" />  

                    <padding android:bottom="1.0dip" android:left="1.0dip" android:right="1.0dip" android:top="0.0dip" />  

                    <corners android:bottomleftradius="3.0dip" android:bottomrightradius="3.0dip" android:topleftradius="1.0dip" android:toprightradius="1.0dip" />  

                    <solid android:color="@color/setting_item_bgcolor_press" />  

        </layer-list>  

                    <solid android:color="@color/setting_item_bgcolor" />  

</selector>  

继续阅读