转-Android shape的使用实现圆角,虚线,渐变等效果

 

http://blog.csdn.net/knxw0001/article/details/8834434

布局实现:

1. 在res中建立drawable文件夹。

2. 在drawable文件夹中建立shape.xml。

3. shape.xml的代码如下:

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <shape xmlns:android=“http://schemas.android.com/apk/res/android”
  3.     android:shape=“rectangle” >
  4.     <gradient
  5.         android:angle=“270”
  6.         android:centerColor=“#77333333”
  7.         android:centerX=“0.5”
  8.         android:centerY=“0.5”
  9.         android:endColor=“#ff666666”
  10.         android:startColor=“#ff666666”
  11.         android:type=“linear” />
  12.     <corners android:radius=“5dip” />
  13. </shape>

4. shape的值有四种:rectangle-矩形;oval-椭圆;line-线;ring-环。

5. angle的值:从左到右为0;然后逆时针旋转,90度为从下到上,270为从上到下。

6. centerx和centery的值取0-1;表示中间点的位置,如下面三幅图:中间点分别是0,0.5,1。中间点为0的,则渐变的中间色的位置在最上面;中间点为0.5的,则渐变的中间色在屏幕中间;中间点为1 的,则中间点在屏幕下部。

7. startcolor、centercolor、endcolor为渐变色的开始、中间、最后的颜色值。

8. type的值有三种:linear-线性;radial-径向;sweep-3D效果。

9. color的radius值表示边角的弧度半径。

代码实现:

一、LinearGradient线性渐变

在android平台中提供了两种重载方式来实例化该类分别为,他们的不同之处为参数中第一 种方法可以用颜色数组,和位置来实现更细腻的过渡效果,比如颜色采样int[] colors数组中存放20种颜色,则渐变将会逐一处理。而第二种方法参数仅为起初颜色color0和最终颜色color1。

LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)

LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)

使用实例如下:
Paint p=new Paint();
LinearGradient lg=new LinearGradient(0,0,100,100,Color.RED,Color.BLUE,Shader.TileMode.MIRROR);  //

参数一为渐变起初点坐标x位置,参数二为y轴位置,参数三和四分辨对应渐变终点,最后参数为平铺方式,这里设置为镜像.

刚才Android开发网已经讲到Gradient是基于Shader类,所以我们通过Paint的setShader方法来设置这个渐变,代码

 

如下:
p.setShader(lg);
canvas.drawCicle(0,0,200,p); //参数3为画圆的半径,类型为float型。

 

二、 RadialGradient镜像渐变

有了上面的基础,我们一起来了解下径向渐变。和上面参数唯一不同的是,径向渐变第三个参数是半径,其他的和线性渐变

相同。

RadialGradient(float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile)
RadialGradient(float x, float y, float radius, int color0, int color1, Shader.TileMode tile)

 

三、 SweepGradient角度渐变

对于一些3D立体效果的渐变可以尝试用角度渐变来完成一个圆锥形,相对来说比上面更简单,前两个参数为中心点,然后通过载入的颜色来平均的渐变渲染。

SweepGradient(float cx, float cy, int[] colors, float[] positions)  //对于最后一个参数SDK上的描述为May be NULL. The relative position of each corresponding color in the colors array, beginning with 0 and ending with 1.0. If the values are not monotonic, the drawing may produce unexpected results. If positions is NULL, then the colors are automatically spaced evenly.,所以Android123建议使用下面的重载方法,本方法一般为NULL即可。
SweepGradient(float cx, float cy, int color0, int color1)

 

 

 

 

 

Android中用layer-list编写阴影效果

 658人阅读 评论(0) 收藏 举报

要实现这种效果当然有多 种方式,比如背景图片直接加阴影效果,或者用代码画一个(onDraw())。这次我们直接用layer-list来实现。在项目 res->drawable中创建一个xml,如果列表中有layer-list选择的话直接选择创建,如果没有的话就随意(似乎4.0以下没有 layer-list选择),没有的话将xml文件中的根标签改为layer-list即可。上述效果具体代码如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <layer-list xmlns:android=“http://schemas.android.com/apk/res/android” >
  3.     <!– 阴影部分 –>
  4.     <!– 个人觉得更形象的表达:top代表下边的阴影高度,left代表右边的阴影宽度。其实也就是相对应的offset,solid中的颜色是阴影的颜色,也可以设置角度等等 –>
  5.     <item
  6.         android:left=“2dp”
  7.         android:top=“2dp”>
  8.         <shape android:shape=“rectangle” >
  9.             <gradient
  10.                 android:angle=“270”
  11.                 android:endColor=“#0F000000”
  12.                 android:startColor=“#0F000000” />
  13.             <corners
  14.                 android:bottomLeftRadius=“6dip”
  15.                 android:bottomRightRadius=“6dip”
  16.                 android:topLeftRadius=“6dip”
  17.                 android:topRightRadius=“6dip” />
  18.         </shape>
  19.     </item>
  20.     <!– 背景部分 –>
  21.     <!– 形象的表达:bottom代表背景部分在上边缘超出阴影的高度,right代表背景部分在左边超出阴影的宽度(相对应的offset) –>
  22.     <item
  23.         android:bottom=“3dp”
  24.         android:right=“3dp”>
  25.         <shape android:shape=“rectangle” >
  26.             <gradient
  27.                 android:angle=“270”
  28.                 android:endColor=“#FFFFFF”
  29.                 android:startColor=“#FFFFFF” />
  30.             <corners
  31.                 android:bottomLeftRadius=“6dip”
  32.                 android:bottomRightRadius=“6dip”
  33.                 android:topLeftRadius=“6dip”
  34.                 android:topRightRadius=“6dip” />
  35.         </shape>
  36.     </item>
  37. </layer-list>

原创文章转载请注明:转载自:Android中用layer-list编写阴影效果

 

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

分类: Android 移动开发 28051人阅读 评论(13) 收藏 举报

目录(?)[+]

<shape>和<selector>在Android UI设计中经常用到。比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape>和<selector>。
可以这样说,<shape>和<selector>在美化控件中的作用是至关重要。

在看这篇文章之前,可以看下这个小例子:镂空按钮的实现

 

1.Shape
简介

作用: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” 

上面填充

2.Selector
简介

根据不同的选定状态来定义不同的现实效果

分为四大属性:

android:state_selected 是选中

android:state_focused 是获得焦点

android:state_pressed 是点击

android:state_enabled 是设置是否响应事件,指所有事件

另:

android:state_window_focused 默认时的背景图片

引用位置:res/drawable/文件的名称.xml

使用的方法:

Java代码中:R.drawable.文件的名称

XML中:Android:background=”@drawable/文件的名称”

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <?xml version=“1.0” encoding=“utf-8” ?>
  2. <selector xmlns:Android=“http://schemas.android.com/apk/res/android”>
  3. <!– 默认时的背景图片–>
  4. <item Android:drawable=“@drawable/pic1” />
  5. <!– 没有焦点时的背景图片 –>
  6. <item
  7.    Android:state_window_focused=“false”
  8.    android:drawable=“@drawable/pic_blue”
  9.    />
  10. <!– 非触摸模式下获得焦点并单击时的背景图片 –>
  11. <item
  12.    Android:state_focused=“true”
  13.    android:state_pressed=“true”
  14.    android:drawable“@drawable/pic_red”
  15.    />
  16. <!– 触摸模式下单击时的背景图片–>
  17. <item
  18.    Android:state_focused=“false”
  19.    Android:state_pressed=“true”
  20.    Android:drawable=“@drawable/pic_pink”
  21.    />
  22. <!–选中时的图片背景–>
  23. <item
  24.    Android:state_selected=“true”
  25.    android:drawable=“@drawable/pic_orange”
  26.    />
  27. <!–获得焦点时的图片背景–>
  28. <item
  29.    Android:state_focused=“true”
  30.    Android:drawable=“@drawable/pic_green”
  31.    />
  32. </selector>
3.layer-list
简介:

将多个图片或上面两种效果按照顺序层叠起来

例子:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <layer-list xmlns:android=“http://schemas.android.com/apk/res/android”>
  3.     <item>
  4.       <bitmap android:src=“@drawable/android_red”
  5.         android:gravity=“center” />
  6.     </item>
  7.     <item android:top=“10dp” android:left=“10dp”>
  8.       <bitmap android:src=“@drawable/android_green”
  9.         android:gravity=“center” />
  10.     </item>
  11.     <item android:top=“20dp” android:left=“20dp”>
  12.       <bitmap android:src=“@drawable/android_blue”
  13.         android:gravity=“center” />
  14.     </item>
  15. </layer-list>

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <ImageView
  2.     android:layout_height=“wrap_content”
  3.     android:layout_width=“wrap_content”
  4.     android:src=“@drawable/layers” />

效果图:

4.最后

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

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <selector xmlns:android=“http://schemas.android.com/apk/res/android”>
  2.     <item android:state_pressed=“true”>
  3.         <layer-list>
  4.             <item android:bottom=“8.0dip”>
  5.                 <shape>
  6.                     <solid android:color=“#ffaaaaaa” />
  7.                 </shape>
  8.             </item>
  9.             <item>
  10.                 <shape>
  11.                     <corners android:bottomLeftRadius=“4.0dip” android:bottomRightRadius=“4.0dip” android:topLeftRadius=“1.0dip” android:topRightRadius=“1.0dip” />
  12.                     <solid android:color=“#ffaaaaaa” />
  13.                     <padding android:bottom=“1.0dip” android:left=“1.0dip” android:right=“1.0dip” android:top=“0.0dip” />
  14.                 </shape>
  15.             </item>
  16.             <item>
  17.                 <shape>
  18.                     <corners android:bottomLeftRadius=“3.0dip” android:bottomRightRadius=“3.0dip” android:topLeftRadius=“1.0dip” android:topRightRadius=“1.0dip” />
  19.                     <solid android:color=“@color/setting_item_bgcolor_press” />
  20.                 </shape>
  21.             </item>
  22.         </layer-list>
  23.     </item>
  24.     <item>
  25.         <layer-list>
  26.             <item android:bottom=“8.0dip”>
  27.                 <shape>
  28.                     <solid android:color=“#ffaaaaaa” />
  29.                 </shape>
  30.             </item>
  31.             <item>
  32.                 <shape>
  33.                     <corners android:bottomLeftRadius=“4.0dip” android:bottomRightRadius=“4.0dip” android:topLeftRadius=“1.0dip” android:topRightRadius=“1.0dip” />
  34.                     <solid android:color=“#ffaaaaaa” />
  35.                     <padding android:bottom=“1.0dip” android:left=“1.0dip” android:right=“1.0dip” android:top=“0.0dip” />
  36.                 </shape>
  37.             </item>
  38.             <item>
  39.                 <shape>
  40.                     <corners android:bottomLeftRadius=“3.0dip” android:bottomRightRadius=“3.0dip” android:topLeftRadius=“1.0dip” android:topRightRadius=“1.0dip” />
  41.                     <solid android:color=“@color/setting_item_bgcolor” />
  42.                 </shape>
  43.             </item>
  44.         </layer-list>
  45.     </item>
  46. </selector>

 

android layer_list用法总结 button颜色控制

作者:浩宇碧海  发布日期:2013-09-28 11:03:09
Tag标签:android  layer_list  button
  • 1:颜色动态变化,多图层重叠首先先看效果图: 
    \

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

     

    01.<?xml version="1.0" encoding="utf-8"?>
    02.<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    03.<item>
    04.<shape>
    05.<gradient
    06.android:angle="90"
    07.android:centerColor="#104E8B"
    08.android:dither="true"
    09.android:endColor="#ffe26f"
    10.android:height="1px"
    11.android:startColor="#fff1b9" />
    12.</shape>
    13.</item>
    14.</layer-list>

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

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

     

    \

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

     

    1.<?xml version="1.0" encoding="UTF-8"?> 
    2.<layer-list 
    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顾名思义就是层图形对象。下面直接用一个简单的代码表示:

    01.Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.cwj);   
    02.Drawable[] array = new Drawable[3];   
    03.array[0] = new PaintDrawable(Color.BLACK); //黑色   
    04.array[1] = new PaintDrawable(Color.WHITE); //白色      
    05.array[2] = new BitmapDrawable(bm); //位图资源           
    06.LayerDrawable ld = new LayerDrawable(array); //参数为上面的Drawable数组   
    07.ld.setLayerInset(1, 1, 1, 1, 1);  //第一个参数1代表数组的第二个元素,为白色   
    08.ld.setLayerInset(2, 2, 2, 2, 2); //第一个参数2代表数组的第三个元素,为位图资源   
    09.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的文件,内容如下:

     

    01.<?xml version="1.0" encoding="UTF-8"?> 
    02.<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
    03.<!-- 连框颜色值 --> 
    04.<item>  
    05.<shape>  
    06.<solid android:color="#ff0000" />  
    07.</shape>  
    08.</item>  
    09.<!-- 主体背景颜色值 --> 
    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里面设置如下:

    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>

 

 

 

android 画虚线、实线,画圆角矩形,一半圆角

分类: android开发 3505人阅读 评论(0) 收藏 举报
1、画虚线,实线:建立dotted_line_gray.xml文件放在drawable文件夹下面。
android:shape=”line” 可以修改你想要的形状

[html] view plaincopy

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <shape xmlns:android=“http://schemas.android.com/apk/res/android”
  3.      android:shape=“line”>
  4.      <!– 显示一条虚线,破折线的宽度为dashWith,破折线之间的空隙的宽度为dashGap,当dashGap=0dp时,为实线 –>
  5.    <stroke android:width=“1dp” android:color=“#D5D5D5”
  6.              android:dashWidth=“2dp” android:dashGap=“3dp” />
  7.              <!– 虚线的高度 –>
  8.      <size android:height=“2dp” />
  9. </shape>

然后在布局的xml里面:
作为ImageView或者Linearlayout等作为背景源就可以了。

[html] view plaincopy

  1. <LinearLayout
  2.             android:id=“@+id/activity_line”
  3.             android:layout_width=“fill_parent”
  4.             android:layout_height=“wrap_content”
  5.             android:layout_marginLeft=“5dip”
  6.             android:layout_marginRight=“5dip”
  7.             android:background=“@drawable/dotted_line_gray” />

2、画圆角矩形

建立 rect_gray.xml文件放在drawable文件夹下面。

[html] view plaincopy

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <shape xmlns:android=“http://schemas.android.com/apk/res/android”
  3.     android:shape=“rectangle”>
  4.             <!– 填充颜色 –>
  5.     <solid android:color=“#FFFFFF”></solid>
  6.     <!– 线的宽度,颜色灰色 –>
  7.     <stroke android:width=“1dp” android:color=“#D5D5D5”></stroke>
  8.     <!– 矩形的圆角半径 –>
  9.     <corners android:radius=“0dp” />
  10. </shape>

然后在布局的xml里面:
作为ImageView或者Linearlayout等作为背景源就可以了。

[html] view plaincopy

  1. <LinearLayout
  2.                     android:id=“@+id/activity_myhezu_wantchuzu”
  3.                     android:layout_width=“wrap_content”
  4.                     android:layout_height=“wrap_content”
  5.                     android:background=“@drawable/myhezu_dottedline_rect_green”
  6.                     android:orientation=“horizontal” >

3、一半圆角:

[html] view plaincopy

  1. <shape xmlns:android=“http://schemas.android.com/apk/res/android”
  2.     android:shape=“rectangle”>
  3.         <corners  android:topLeftRadius=“16dp” <!–上面左圆角的半径–>
  4.               android:topRightRadius=“16dp”          <!–上面右圆角的半径–>
  5.               android:bottomLeftRadius=“0dp”         <!–下面左圆角的半径–>
  6.               android:bottomRightRadius=“0dp”/>   <!–下面右圆角的半径–>
  7.         <gradient android:startColor=“#ffffff”
  8.               android:endColor=“#ffffff”
  9.               android:angle=“270”/>
  10.         <stroke   android:width=“1dp”
  11.               android:color=“#80000000” />
  12.         </shape>

Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体的了解,稍作总结:

先看下面的代码:

[html] view plaincopy

  1. <shape>
  2.     <!– 实心 –>
  3.     <solid android:color=“#ff9d77”/>
  4.     <!– 渐变 –>
  5.     <gradient
  6.         android:startColor=“#ff8c00”
  7.         android:endColor=“#FFFFFF”
  8.         android:angle=“270” />
  9.     <!– 描边 –>
  10.     <stroke
  11.         android:width=“2dp”
  12.         android:color=“#dcdcdc” />
  13.     <!– 圆角 –>
  14.     <corners
  15.         android:radius=“2dp” />
  16.     <padding
  17.         android:left=“10dp”
  18.         android:top=“10dp”
  19.         android:right=“10dp”
  20.         android:bottom=“10dp” />
  21. </shape>

solid:实心,就是填充的意思
android:color指定填充的颜色

gradient:渐变
android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。
另外渐变默认的模式为android:type=”linear”,即线性渐变,可以指定渐变为径向渐变,android:type=”radial”,径向渐变需要指定半径android:gradientRadius=”50″。

stroke:描边
android:width=”2dp” 描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth=”5dp”

android:dashGap=”3dp”
其中android:dashWidth表示’-‘这样一个横线的宽度,android:dashGap表示之间隔开的距离。

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

[html] view plaincopy

  1. <corners
  2.         android:topRightRadius=“20dp”    右上角
  3.         android:bottomLeftRadius=“20dp”    右下角
  4.         android:topLeftRadius=“1dp”    左上角
  5.         android:bottomRightRadius=“0dp”    左下角
  6. />

这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。
还有网上看到有人说设置成0dp无效,不过我在测试中发现是可以的,我用的是2.2,可能修复了这个问题吧,如果无效的话那就只能设成1dp了。

padding:间隔
这个就不用多说了,XML布局文件中经常用到。

大体的就是这样,以下是一个使用的具体示例:用在Selector中作为Button的背景,分别定义了按钮的一般状态、获得焦点状态和按下时的状态,具体代码如下:

[html] view plaincopy

  1. main.xml:
  2. <Button
  3.     android:layout_width=“wrap_content”
  4.     android:layout_height=“wrap_content”
  5.     android:text=“TestShapeButton”
  6.     android:background=“@drawable/button_selector”
  7.     />
  8. >

button_selector.xml:

[html] view plaincopy

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <selector
  3.     xmlns:android=“http://schemas.android.com/apk/res/android”>
  4.     <item android:state_pressed=“true” >
  5.         <shape>
  6.             <!– 渐变 –>
  7.             <gradient
  8.                 android:startColor=“#ff8c00”
  9.                 android:endColor=“#FFFFFF”
  10.                 android:type=“radial”
  11.                 android:gradientRadius=“50” />
  12.             <!– 描边 –>
  13.             <stroke
  14.                 android:width=“2dp”
  15.                 android:color=“#dcdcdc”
  16.                 android:dashWidth=“5dp”
  17.                 android:dashGap=“3dp” />
  18.             <!– 圆角 –>
  19.             <corners
  20.                 android:radius=“2dp” />
  21.             <padding
  22.                 android:left=“10dp”
  23.                 android:top=“10dp”
  24.                 android:right=“10dp”
  25.                 android:bottom=“10dp” />
  26.         </shape>
  27.     </item>
  28.     <item android:state_focused=“true” >
  29.         <shape>
  30.             <gradient
  31.                 android:startColor=“#ffc2b7”
  32.                 android:endColor=“#ffc2b7”
  33.                 android:angle=“270” />
  34.             <stroke
  35.                 android:width=“2dp”
  36.                 android:color=“#dcdcdc” />
  37.             <corners
  38.                 android:radius=“2dp” />
  39.             <padding
  40.                 android:left=“10dp”
  41.                 android:top=“10dp”
  42.                 android:right=“10dp”
  43.                 android:bottom=“10dp” />
  44.         </shape>
  45.     </item>
  46.     <item>
  47.         <shape>
  48.             <solid android:color=“#ff9d77”/>
  49.             <stroke
  50.                 android:width=“2dp”
  51.                 android:color=“#fad3cf” />
  52.             <corners
  53.                 android:topRightRadius=“5dp”
  54.                 android:bottomLeftRadius=“5dp”
  55.                 android:topLeftRadius=“0dp”
  56.                 android:bottomRightRadius=“0dp”
  57.             />
  58.             <padding
  59.                 android:left=“10dp”
  60.                 android:top=“10dp”
  61.                 android:right=“10dp”
  62.                 android:bottom=“10dp” />
  63.         </shape>
  64.     </item>
  65. </selector>

运行效果如下图:
一般状态:

获得焦点状态:

按下状态:

http://blog.csdn.net/by317966834/article/details/8773518?utm_source=tuicool

http://blog.csdn.net/lan410812571/article/details/9946991

 

Android shape的使用实现圆角,虚线,渐变等效果

2014-05-27 15:10:23本站整理浏览(766)

Android shape的使用实现圆角,虚线,渐变等效果,有需要的朋友可以参考下。
输入框或者是一些按钮的背景都喜欢使用圆角的效果或者是渐变的效果,你可以使用背景图片来实现,但是这样会非常耗费资源应该尽量的减少使用图片资源,这时我们就可以使用shape来实现此效果。(1)在res/drawable下定义一个xml文件用于定义shape;(2)在代码中或者在xml文件中将此shape作为背景就可以实现圆角效果。接下来我们详细的介绍一下shape。

<?xml version="1.0" encoding="UTF-8"?>
   <!--
        android:shape 一共有四种值 rectangle:矩形, oval:椭圆形,line:线性,ring:环形
        下面的属性只有在android:shape="ring时可用:  
        android:innerRadius         尺寸,内环的半径。  
        android:innerRadiusRatio    浮点型,以环的宽度比率来表示内环的半径,  
         例如,如果android:innerRadiusRatio,表示内环半径等于环的宽度除以5,这个值是可以被覆盖的,默认为9.  
        android:thickness           尺寸,环的厚度  
        android:thicknessRatio      浮点型,以环的宽度比率来表示环的厚度,例如,如果android:thicknessRatio="2",  
         那么环的厚度就等于环的宽度除以2。这个值是可以被android:thickness覆盖的,默认值是3.  
        android:useLevel            boolean值,如果当做是LevelListDrawable使用时值为true,否则为false.


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

    <!--
        内部填充  
        android:color   颜色值 填充颜色  


    -->
    <solid android:color="#FFFFFF" />
    <!--
         圆角
        android:radius              整型 整体半径  
        android:topLeftRadius       整型 左上角半径  
        android:topRightRadius      整型 右上角半径  
        android:bottomLeftRadius    整型 左下角半径  
        android:bottomRightRadius   整型 右下角半径


    -->
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />
    <!--
         描边  
        android:width       整型  描边的宽度  
        android:color       颜色值     描边的颜色  
        android:dashWidth   整型  表示描边的样式是虚线的宽度, 值为0时,表示为实线。值大于0则为虚线。  
        android:dashGap     整型  表示描边为虚线时,虚线之间的间隔 即“ - - - - ”  
        如果android:dashGap的值为0或者不设置的时候一样此时都是实线,android:dashWidth的值为
        每个破折号的宽度而android:dashGap表示的是破折号间的距离。


    -->
    <stroke
        android:dashGap="6dp"
        android:dashWidth="30dp"
        android:width="3dp"
        android:color="#ffa8abad" />
    <!--
        size 大小  
        android:width   整型 宽度  
        android:height  整型 高度  
        可以与stroke联合使用  可以设置一条实线或者虚线是with或者height设置为1dp


    -->
    <size android:width="600dp" />
    <!--
        内边距,即内容与边的距离   
        android:left    整型 左内边距  
        android:top     整型 上内边距  
        android:right   整型 右内边距  
        android:bottom  整型 下内边距  


    -->
    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
    <!--
        渐变色  
        android:startColor  颜色值                            起始颜色  
        android:endColor    颜色值                            结束颜色  
        android:centerColor 整型                              渐变中间颜色,即开始颜色与结束颜色之间的颜色  
        android:angle       整型                              渐变角度(PS:当angle=0时,渐变色是从左向右。 然后逆时针方向转,当angle=90时为从下往上。angle                                                              必须为45的整数倍)  
        android:type        ["linear" | "radial" | "sweep"] 渐变类型(取值:linear、radial、sweep)  
                            linear 线性渐变,这是默认设置  
                            radial 放射性渐变,以开始色为中心。  
                            sweep 扫描线式的渐变。  
       android:useLevel     ["true" | "false"]                如果要使用LevelListDrawable对象,就要设置为true。设置为true无渐变。false有渐变色  
       android:gradientRadius 整型                            渐变色半径.当 android:type="radial" 时才使用。单独使用 android:type="radial"会报错。  
       android:centerX        整型                            渐变中心X点坐标的相对位置  
       android:centerY        整型                            渐变中心Y点坐标的相对位置  


    -->
    <gradient
        android:angle="45"
        android:endColor="#80FF00FF"
        android:startColor="#FFFF0000" />

</shape>

使用此shape直接将此设置为背景即可,若果想要每个圆角不一样设置各个方向的圆角值即可,没有圆角可以设置为0.1dp

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:test="http://schemas.android.com/apk/res/com.example.activityanimationdemo"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="click me"
        tools:context=".MainActivity" />

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <com.example.activityanimationdemo.MyImageView
        android:id="@+id/myImageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@id/btn"
        android:layout_below="@+id/text"
        android:layout_marginRight="73dp"
        android:layout_marginTop="14dp"
        test:borderColor="@color/green"
        test:borderSize="5dip"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/myImageView1"
        android:layout_below="@+id/myImageView1"
        android:layout_marginTop="21dp"
        android:background="@drawable/image_bg"
        android:src="@drawable/ic_launcher" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:ems="10"
        android:background="@drawable/image_bg"
        android:inputType="textPostalAddress" >

        <requestFocus />
    </EditText>

</RelativeLayout>