使用shape自定义控件形状

概述

 笔者认为,android应用UI设计应该从容大方,简洁优雅,应尽量避免繁琐多余的形状线条。因此笔者建议使用shape自定义View控件的外观。
 建议理由:shape只能自定义简单形状和颜色填充,然而却有完美的边缘渲染,不会出现边缘锯齿或者模糊的廉价感,这一点对于android UI是十分重要的。并且shape的操作和使用都十分简单。
 操作过程为先在drawable目录下创建根节点为shape.xml资源文件,之后在具体View控件中使用android:background=@drawable/targetshape将绘制的图形设置为View控件背景即可。

子元素与属性

android:shape属性

此属性必须全局声明,用来指定图形的形状基础。属性值:
rectangle:属性默认值,形状基础为矩形
oval:形状基础为椭圆
ring:形状基础为圆环
line:形状基础为直线

solid

 solid子元素用于指定图形填充色。属性:
android:color
 属性值可以是RGB888格式,不指定透明度,例如:android:color="#ff00ff";也可以是ARGB格式,即在RGB888格式的基础上添加透明度值(Alpha),十六进制下的高两位指定透明度,例如:android:color="#50ff00ff"

size

 size子元素用于指定图形的宽高。属性:
android:width
android:height
 此子元素不可用于linering
 用于oval时,它的两个属性中一个指定长轴长,另一个指定短轴长。

corners

 corners子元素指定矩形四个角的圆角半径。属性:
android:radius:同时指定四个角度圆角半径。
android:topLeftRadius:单独指定左上角圆角半径。
android:topRightRadius:单独指定右上角圆角半径。
android:bottomLeftRadius:单独指定左下角圆角半径。
android:bottomRightRadius:单独指定右下角圆角半径。
 此子元素只能用于矩形形状基础。

stroke

 stroke子元素指定形状的描边。常用属性:
android:width:指定描边宽度。
android:color:指定描边颜色。可用RGB888ARGB

gradient

 gradient子元素指定颜色渐变。属性:
android:type:指定渐变类型,属性值有:linear(线性渐变)、radial(径向渐变)、sweep(扫描渐变)。
android:startColor:渐变的开始颜色。
android:centerColor:渐变的中间颜色。
android:endColor:渐变的结束颜色。
android:angle:渐变方向角,属性值必须是45的整数倍。只对线性渐变有效。
android:gradientRadius:渐变半径,只对径向渐变有效。
android:centerX:X方向的渐变中心位置,属性值为0.0到1.0,0.0表示图形最左,1.0表示图形最右。
android:centerY:Y方向的渐变中心位置,属性值为0.0到1.0,0.0表示图形最下,1.0表示图形最上。
 颜色的渐变经历:startColorTocenterColorToendColor
gradient的颜色将覆盖solid的颜色。

padding

 padding子元素用于设置内边距,即内容(比如文字)与边缘的距离。

line

 line可以绘制直线和虚线。由于种种原因,笔者放弃了解。

ring

 ring的尺寸属性必须全局声明

常用属性

android:innerRadius:圆环内径。
android:thickness:圆环厚度。
android:useLevel:只有此属性值为false形状才会显示。

代码示例

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadius="100dp"
    android:thickness="20dp"
    android:useLevel="false">
    <gradient
    android:type="sweep"
    android:startColor="#0000ff"
    android:endColor="#ff0000" />
</shape>

效果如下图:
效果

动态修改shape颜色

 假如Button使用shape绘制的图形作为背景,那么在Java代码中动态修改颜色的方法为:

Button btn_1=(Button)findviewById(R.id.btn_1);
GradientDrawable grd_1=btn_1.getBackground();
grd_1.setColor(0x50ff00ff);

 还可以使用setAlpha()方法动态设置透明度。
欢迎指正

发布了7 篇原创文章 · 获赞 1 · 访问量 280

猜你喜欢

转载自blog.csdn.net/weixin_42315944/article/details/105025180
今日推荐