【Android开发笔记】光速码出一条万能虚线

作为一个常年混迹于UC的屌丝,我可谓得到了UC震惊部的真传,所以今天标题标题显得有些夸张,大家娱乐娱乐即可。

进入正题

虚线,想必在不少APP中都有用到。最近项目中正好也有这样的设计,所以就诞生了今天我要分享给大家的这个自定义View,我将它命名为ColorfulLine(多彩线条),之所以多彩,是因为它不仅仅能实现常规印象中的灰色虚线,也可以实现更多彩的其他效果,具体见效果图。

效果图

ColorfulLine

使用方法

从效果图中的xml代码片段可以看出,使用起来也是很简单的,只需要设置colors,colorSizes,colorSizeUnit,direction这几个属性就可以了,下面对这些属性做一说明:

属性含义
colors颜色数组,用逗号分隔的16进制RGB颜色值“#ffffff,#00ff00”
colorSizescolors对应的颜色绘制长度,数组大小应和colors相同“16,16”
colorSizeUnitcolorSizes的单位dp/px
direction方向vertical纵向/horizontal横向
源码解析(使用kotlin)

Github(觉得对你有用就★一下吧)

  • xml属性值获取
    //这里将colos中的数组字符串拆分,再解析为Int的颜色值,colorSizes的获取于此类似
    var colors: List = listOf()
    val typedArray: TypedArray = resources.obtainAttributes(attrs, R.styleable.ColorfulLine)
    val colorsString = typedArray.getString(R.styleable.ColorfulLine_colors)
    colors = colorsString.split(“,”).map { Color.parseColor(it) }

  • 绘制
    //drawnSize为已经绘制的长度,根据绘制的方向,判断该值是否大于View的长或宽,然后循环进行绘制
    var drawnSize = 0
    when (direction) {
    1 -> {
    while (drawnSize < width) {
    for ((index, color) in colors.withIndex()) {
    paint.color = color
    canvas?.drawRect(drawnSize.toFloat(), 0F, (drawnSize + colorSizes[index]).toFloat(), height.toFloat(), paint)
    drawnSize += colorSizes[index]
    }
    }
    }
    2 -> {
    while (drawnSize < height) {
    for ((index, color) in colors.withIndex()) {
    paint.color = color
    canvas?.drawRect(0F, drawnSize.toFloat(), width.toFloat(), (drawnSize + colorSizes[index]).toFloat(), paint)
    drawnSize += colorSizes[index]
    }
    }
    }
    }

  • 实现起来还是很简单的,希望对你有用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值