当前位置: 代码迷 >> Android >> android layer_list 用法小结 button颜色控制
  详细解决方案

android layer_list 用法小结 button颜色控制

热度:36   发布时间:2016-04-28 07:58:17.0
android layer_list 用法总结 button颜色控制

1:颜色动态变化,多图层重叠

   首先先看效果图:


在res文件目录下建立drawable文件夹后建立该layer_list.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <gradient
                android:angle="90"
                android:centerColor="#104E8B"
                android:dither="true"
                android:endColor="#ffe26f"
                android:height="1px"
                android:startColor="#fff1b9" />
        </shape>
    </item>
</layer-list>

2:图片重叠位置的控制:


要用2张图片叠加起来,看上去形成一张图片 

 

首先创建一个drawalbe/login_head.xml的文件,内容如下: 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <layer-list  
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.     <item android:id="@+id/user_faceback_drawable" android:drawable="@drawable/faceback" />  
  5.     <item android:id="@+id/user_face_drawable" android:drawable="@drawable/h001" android:left="10.0dip" android:top="18.0dip" android:right="25.0dip" android:bottom="35.0dip" />  
  6. </layer-list>  

然后就可以使用这个组合的图片了,比如在ImageView中显示: 
<ImageView android:id="@+id/faceImg" android:background="@drawable/login_head" 
android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

使用java代码: 
如何使多个Drawable叠加(合成图片)? 
大家可能知道Bitmap的叠加处理在Android平台中可以通过Canvas一层一层的画就行了,而Drawable中如何处理呢? 除了使用BitmapDrawable的getBitmap方法将Drawable转换为Bitmap外,今天Android123给大家说下好用简单的LayerDrawable类,LayerDrawable顾名思义就是层图形对象。下面直接用一个简单的代码表示: 


Java代码  收藏代码
  1. Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.cwj);    
  2.     Drawable[] array = new Drawable[3];    
  3.      array[0] = new PaintDrawable(Color.BLACK); //黑色    
  4.      array[1] = new PaintDrawable(Color.WHITE); //白色       
  5.      array[2] = new BitmapDrawable(bm); //位图资源            
  6.     LayerDrawable ld = new LayerDrawable(array); //参数为上面的Drawable数组    
  7.     ld.setLayerInset(11111);  //第一个参数1代表数组的第二个元素,为白色    
  8.     ld.setLayerInset(22222); //第一个参数2代表数组的第三个元素,为位图资源    
  9.     mImageView.setImageDrawable(ld);   


上面的方法中LayerDrawable是关键,Android开发网提示setLayerInset方法原型为public void setLayerInset (int index, int l, int t, int r, int b) 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottom。对于简单的图片合成我们可以将第一和第二层的PaintDrawable换成BitmapDrawable即可实现简单的图片合成。 



3:通过solid来定义不同边框的颜色,可以只定义一个边框的颜色 
以下是设置按钮的右边框和底边框颜色为红色,边框大小为3dp,如下图: 

 
在drawable新建一个 buttonstyle.xml的文件,内容如下: 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">   
  3. <!-- 连框颜色值 -->  
  4. <item>   
  5.       <shape>   
  6.             <solid android:color="#ff0000" />   
  7.       </shape>   
  8. </item>   
  9. <!-- 主体背景颜色值 -->  
  10. <item android:bottom="3dp" android:right="3dp">   
  11.      <shape>   
  12.            <solid android:color="#ffffff" />  
  13.              
  14.            <padding android:bottom="10dp"  
  15.                 android:left="10dp"  
  16.                 android:right="10dp"  
  17.                 android:top="10dp" />  
  18.      </shape>       
  19. </item>  
  20. </layer-list>  

然后在布局文件里面的Button里面设置如下: 

Xml代码  收藏代码
  1. <Button  
  2.    android:id="@+id/button1"  
  3.    android:layout_width="wrap_content"  
  4.    android:layout_height="wrap_content"  
  5.    android:text="Button1"  
  6.    android:background="@drawable/buttonstyle" />  


4:再看下面button界面的实现效果:



selector.xml文件:

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/tab_main_nav_on" />
<item android:state_selected="false" android:drawable="@drawable/tab_main_nav_off" />
</selector> 

@drawable/tab_main_nav_on"

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

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


    <gradient
        android:angle="270"
        android:endColor="#50000000"
        android:startColor="#30000000" />
    <!--


 各种颜色
    0f99bd 
    096c96
    
    767676
    4d4d4d
    -->


</shape>

@drawable/tab_main_nav_off

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


<!-- Copyright 2010 Mark Wyszomierski -->


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


    <gradient
        android:angle="270"
        android:endColor="#30000000"
        android:startColor="#50000000" />


</shape>


  相关解决方案