android 自定义drawable图形(oval,ring,rectangle)

本文详细介绍了如何在Android中创建自定义drawable,包括rectangle(矩形)、ring(圆环)和oval(椭圆/圆)的XML属性设置,如corners、solid、stroke和gradient,用于实现圆角、边框、渐变色等效果。同时,文中还提到了ring的特殊属性如innerRadius和thickness,并展示了镂空圆角矩形的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们会需要自定义drawable,用来当一些文字的背景图片,使用方式为在drawable文件夹下新建xml文件

1.自定义drawable中的图形可以为oval(椭圆),ring(圆环),rectangle(长方形),line(线段)

2.首先我们看下rectangle

        

  1. <pre name="code" class="html"> <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape= "rectangle" >
  4. <corners
  5. android:radius= "30dip"/>
  6. <solid android:color="#000000"/>
  7. <stroke android:color="#ffffff"
  8. android:width= "4dp"
  9. android:dashWidth= "10dp"
  10. android:dashGap= "3dp"/>
  11. <size
  12. android:width= "200dp"
  13. android:height= "400dp"/>
  14. <gradient
  15. android:startColor= "#ff00ff"
  16. android:endColor= "#000000"
  17. android:type= "linear"
  18. android:centerX= "0.5"
  19. android:centerColor= "#ffffff"
  20. android:centerY= "0.5"
  21. android:angle= "45"/>
  22. </shape>

解释一下上面的属性:1.coners:设置的是四个角的半径,设置之后就圆角矩形了

     2.solid : 填充图形的颜色

     3.stroke:设置的是边框,其中color是边框的颜色,width是边框的宽度

                    dashWidth表示横线的宽度,dashGap:表示为隔开的距离,可以看到上面

上传的图片边框是一段一段,就是使用上面俩个属性的效果

     4.设置的是图形的大小

     5.gradient:这个是设置渐变色的,startColor为开始的颜色,centerColor为中间的颜色

endColor为结束时的颜色,centerX,centerY是设置中间颜色从哪开始取值范围为

(0~1),angle为角度,这个你们可以自己去设置为0,45,90,去体会一下

补充:

  • solid: 设置形状填充的颜色,只有android:color一个属性

    • android:color 填充的颜色
  • padding: 设置内容与形状边界的内间距,可分别设置左右上下的距离

    • android:left 左内间距
    • android:right 右内间距
    • android:top 上内间距
    • android:bottom 下内间距
  • gradient: 设置形状的渐变颜色,可以是线性渐变、辐射渐变、扫描性渐变

    • android:type 渐变的类型
      • linear 线性渐变,默认的渐变类型
      • radial 放射渐变,设置该项时,android:gradientRadius也必须设置
      • sweep 扫描性渐变
    • android:startColor 渐变开始的颜色
    • android:endColor 渐变结束的颜色
    • android:centerColor 渐变中间的颜色
    • android:angle 渐变的角度,线性渐变时才有效,必须是45的倍数,0表示从左到右,90表示从下到上
    • android:centerX 渐变中心的相对X坐标,放射渐变时才有效,在0.0到1.0之间,默认为0.5,表示在正中间
    • android:centerY 渐变中心的相对X坐标,放射渐变时才有效,在0.0到1.0之间,默认为0.5,表示在正中间
    • android:gradientRadius 渐变的半径,只有渐变类型为radial时才使用
    • android:useLevel 如果为true,则可在LevelListDrawable中使用
  • corners: 设置圆角,只适用于rectangle类型,可分别设置四个角不同半径的圆角,当设置的圆角半径很大时,比如200dp,就可变成弧形边了

    • android:radius 圆角半径,会被下面每个特定的圆角属性重写
    • android:topLeftRadius 左上角的半径
    • android:topRightRadius 右上角的半径
    • android:bottomLeftRadius 左下角的半径
    • android:bottomRightRadius 右下角的半径
  • stroke: 设置描边,可描成实线或虚线。

    • android:color 描边的颜色
    • android:width 描边的宽度
    • android:dashWidth 设置虚线时的横线长度
    • android:dashGap 设置虚线时的横线之间的距离

                 

上面这些是我看英文文档中的,建议大家直接去看英文文档,链接:英文文档

2.ring(圆环)

  1. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:shape= "ring"
  3. android:useLevel= "false"
  4. android:innerRadius= "50dp"
  5. android:thickness= "20dp"
  6. >
  7. <solid
  8. android:color= "#ff00ff"/>
  9. <size
  10. android:width= "150dp"
  11. android:height= "150dp"/>
  12. <stroke
  13. android:width= "3dp"
  14. android:color= "#000000"
  15. />
  16. </shape>


ring这个我感觉用到的不多,如果需要用到大小圆就另说了,其他用oval来代替

大部分属性在前面介绍过来,介绍几个前面没有介绍过的

1.useLevel:false (默认值为true,这有把useLevel设置为false,圆环才能显示出来,具体为什么没看懂文档)

2.thickNess:为外圆环的厚度

3.innerRadius为内圆环的半径,如果不设置上面这俩个值会有默认值


3.oval(椭圆,圆)


 

oval 用法与rectangle差不多,就不细讲了

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape= "oval"
  4. >
  5. <corners
  6. android:radius= "30dip"/>
  7. <solid android:color="#ff00ff"/>
  8. <stroke android:color="#ffffff"
  9. android:width= "4dp"
  10. android:dashWidth= "10dp"
  11. android:dashGap= "3dp"/>
  12. <size
  13. android:width= "200dp"
  14. android:height= "200dp"/>
  15. </shape>

有时候我们会用到镂空的圆角矩形,就是只有一个框框,实现效果如下:



  1. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:shape= "rectangle"
  3. >
  4. <size
  5. android:width= "200dp"
  6. android:height= "100dp"/>
  7. <stroke android:color="@android:color/darker_gray"
  8. android:width= "2dp"/>
  9. <corners android:radius="50dp"
  10. />
  11. </shape>

不要设置填充的颜色(solid)属性即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值