ShapeDrawable用法详解

Shape xml文件编写方式

<?xml version="1.0" encoding="utf-8"?>
<shape    
    xmlns:android="http://schemas.android.com/apk/res/android"    
    android:shape=["rectangle" | "oval" | "line" | "ring"] >    
    <corners        
        android:radius="integer"        
        android:topLeftRadius="integer"        
        android:topRightRadius="integer"        
        android:bottomLeftRadius="integer"        
        android:bottomRightRadius="integer" />    
    <gradient        
        android:angle="integer"        
        android:centerX="integer"        
        android:centerY="integer"        
        android:centerColor="integer"        
        android:endColor="color"        
        android:gradientRadius="integer"        
        android:startColor="color"        
        android:type=["linear" | "radial" | "sweep"]        
        android:useLevel=["true" | "false"] />    
    <padding        
        android:left="integer"        
        android:top="integer"        
        android:right="integer"        
        android:bottom="integer" />    
    <size        
        android:width="integer"        
        android:height="integer" />    
    <solid        
        android:color="color" />    
    <stroke        
        android:width="integer"        
        android:color="color"        
        android:dashWidth="integer"        
        android:dashGap="integer" />
</shape>

< shape>图形属性

表示图形的形状。有四个选项:rectangle(矩形),oval(圆形),line(横线),ring(圆环)。默认形状是矩形。line和ring时必须要通过 < stroke >标签来指定线的宽度和颜色信息。

针对ring这个形状,有5个特殊属性

参数介绍
android:innerRadius指圆环的内半径,和android:innerRadiusRatio同时存在时,以android:innerRadius为准;
android:thickness指圆环的厚度,即外半径减去内半径的大小,和android:thicknessRatio同时存在时,以android:thickness为准;
android:innerRadiusRatio内半径占整个Drawable宽度的比例,默认是9,如果为n,那么内半径 = 宽度/n
android:thicknessRatio厚度占整个Drawable宽度的比例,默认是3,如果为n,那么厚度 = 宽度/n
android:useLevel官方文档建议使用false,否则可能无法达到预期显示效果。除非当做LevelListDrawable来使用

< corners> 圆角效果

表示shape的四个角的角度,它只适用于矩形shape, 这里的角度指圆角的程度,单位是px,有5个属性:
android:radius=”integer” 四个角设定相同的角度,优先级比较低,会被其他的四个属性覆盖

android:topLeftRadius=”integer”

android:topRightRadius=”integer”

android:bottomLeftRadius=”integer”

android:bottomRightRadius=”integer”

< gradient> 渐变效果

它与< solid>标签是互相排斥的,gradient表示渐变效果。

属性介绍
android:angle=”integer”渐变的角度,默认是0,其值必须为45的倍数,0表示从左到右,90表示从上到下,
android:centerX=”integer”渐变中心点的横坐标
android:centerY=”integer”渐变中心点的纵坐标,渐变中心点会影响渐变的具体效果
android:centerColor=”integer”渐变的中间色
android:endColor=”color”渐变的结束色
android:gradientRadius=”integer”渐变的半径 , 仅当android:type=”radial”时有效:
android:startColor=”color”渐变的起始色
android:type=”linear\radial\sweep”渐变类别,liner(线性渐变),radial(径向渐变),sweep(扫描线渐变)
android:useLevel=”true\false”一般为false,当Drawable作为StateListDrawable使用true

gradient渐变效果图

< solid> 填充色(单一色)

这个标签标示纯色填充,通过android:color=”color”指定shape中的颜色

< stroke> 描边

参数介绍
android:width=”integer”描边的宽度,值越大边缘线就越粗
android:color=”color”描边的颜色
android:dashWidth=”integer”虚线的线段宽度
android:dashGap=”integer”组成虚线的线段之间的间隔,间隔越大则虚线空隙越大

注意:如果 android:dashWidth和android:dashGap中有一个为0,那么虚线不能生效。

< padding> 空白

< size> shape的大小

shape作为View背景时,shape会根据View的大小进行拉伸或者缩小。android:width=”integer”和
android:height=”integer” 可以不设置

ShapeDrawable是Android中的一个Drawable类型,它可以让开发者自定义绘制出各种形状的图形。下面是ShapeDrawable用法: 1.创建一个ShapeDrawable对象 可以通过如下方式创建一个ShapeDrawable对象: ``` ShapeDrawable shapeDrawable = new ShapeDrawable(); ``` 2.设置ShapeDrawable的形状 在创建ShapeDrawable对象后,需要设置它的形状。ShapeDrawable支持以下几种形状: 矩形(RectangleShape): ``` shapeDrawable.setShape(new RectShape()); ``` 圆形(OvalShape): ``` shapeDrawable.setShape(new OvalShape()); ``` 线条(LineShape): ``` shapeDrawable.setShape(new LineShape()); ``` 圆角矩形(RoundRectShape): ``` float[] radii = {10, 10, 10, 10, 0, 0, 0, 0}; // 每个角的半径 RectF rectF = new RectF(0, 0, 100, 100); // 矩形的位置和大小 shapeDrawable.setShape(new RoundRectShape(radii, rectF, radii)); ``` 3.设置ShapeDrawable的颜色 设置ShapeDrawable的颜色可以使用setColor()方法: ``` shapeDrawable.getPaint().setColor(Color.RED); ``` 4.设置ShapeDrawable的边框 设置ShapeDrawable的边框可以使用setStroke()方法: ``` shapeDrawable.getPaint().setStrokeWidth(5); shapeDrawable.getPaint().setStyle(Paint.Style.STROKE); shapeDrawable.getPaint().setColor(Color.BLACK); ``` 5.使用ShapeDrawable 最后,可以将ShapeDrawable对象设置为View的背景或者ImageView的src属性,或者直接在自定义绘制的时候使用它。例如,在Activity的onCreate()方法中设置一个矩形ShapeDrawable的背景: ``` ShapeDrawable shapeDrawable = new ShapeDrawable(); shapeDrawable.setShape(new RectShape()); shapeDrawable.getPaint().setColor(Color.RED); View view = findViewById(R.id.view); view.setBackground(shapeDrawable); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值