项目需求:
项目中要做一个退货退款或是退货状态下的进度显示:
实现:
方案一:采用控件组合方式。
在实际开发中,我采用的是ConstraintLayout做为根布局,将textview,imageview组合,利用控件相互制约的方式,实现控件平分宽度。
这种实现起来简单,但是代码写得很繁琐,尤其是控件多的时候。
而且这里步骤也不是固定的,比如在退货退款状态下,就多了一步,那么代码中也就相应要对退件寄出这步做显示和隐藏控制。
所以,在项目上线之后,利用业务时间,就单独画了一个控件,也是就接下来要讲的方案二:
方案二:采用自定义view的方式
效果如下所示:
关键代码如下:
//1. 确定间距 space = width/totalStep
//2. 确定圆点,图片,字体的坐标
private fun initCirclePoints() {
circleDots.clear()
textDots.clear()
bitmapDots.clear()
var textHeight = mBound.bottom-mBound.top
var textWidth = mBound.right -mBound.left
Log.d("hxy ","textHeight = $textHeight,textWidth=$textWidth")
var textPoint = padding*2+textHeight
var offset = circleRadius/2
for(i in 0 until totalStep){
//第一个圆的位置:
when (i) {
0 -> {
var pointFirst = PointF(0f + circleRadius, heightSize / 2.toFloat())
circleDots.add(pointFirst)
Log.d("hxy", "padding=$padding,${
mBound}")
textDots.add(PointF(0f, heightSize / 2