最近在弄PHP,android端需要弄一个指示器,如下图这样的,本来以为要些时间就想网上找了,可是马蛋周五刚好公司没网,好吧,就自己弄了一个,发现还很简单,做个记录吧:

下面说一下实现过程,先说水平的HorizontalStepView,主要是onDraw方法,由于本人水平比较菜,所以就写了四个方法,分别为:

 @Overrideprotected void onDraw(Canvas canvas) {if(mPointCount < 2) return;//画线drawLines(canvas);//画大圆的背景drawBigBackgroundPoints(canvas);//画大的圆点drawBigPoints(canvas);//画上面的文字drawUpTexts(canvas);//画下面的文字drawDownText(canvas) ;}

我本人所理解的自定义View,就是拆分我们需要的需求,拆分到我们都能实现的小过程就行。比如这个例子,可以拆分成线的组成、大圆点、大圆点背景、上面的文字、下面的文字

所有可以根据这写具体的特点,先定义我们需要的属性:

<declare-styleable name="HorizontalStepView"><!--上层文字属性--><attr name="up_text_size" format="dimension"/><attr name="up_text_finished_color" format="color" /><attr name="up_text_todo_color" format="color" /><attr name="up_text_padding" format="dimension" /><!--下层文字属性--><attr name="down_text_size" format="dimension" /><attr name="down_text_finished_color" format="color" /><attr name="down_text_todo_color" format="color" /><attr name="down_text_padding" format="dimension" /><!--大点的属性--><attr name="big_point_radius" format="dimension" /><attr name="big_point_outer_radius" format="dimension" /><attr name="big_point_finished_color" format="color"/><attr name="big_point_todo_color" format="color" /><attr name="big_point_outer_color" format="color" /><!--线的属性--><attr name="line_stroke_width" format="dimension" /><attr name="line_finished_color" format="color" /><attr name="line_todo_color" format="color" /><!--总共需要完成的步骤--><attr name="total_step" format="integer"/></declare-styleable>

这个已经很清楚了,上层文字、下层文字、大圆的属性、线的属性都已经确定,那我们就根据这些属性,设置不同的Paint,如下:

    //画大圆点的Paintprivate Paint mPointPaint;//画线的Paintprivate Paint mLinePaint;//画文字的Paintprivate Paint mTextPaint;

最主要的是画线了,因为涉及到颜色的变化,下面是个人的画法:

private void drawLines(Canvas canvas) {for (int i = 0; i < mPointCount; i++) {  //总共需要完成的步骤,当前的步骤if (i < mCurrentPoint) {  //是否完成,显示的颜色不同mLineColor = mLineFinishedColor;} else {mLineColor = mLineTodoColor;}mLinePaint.setColor(mLineColor);//画线开始与结束的点 这点主要是个人的需求int tempStart = mStart + mBigPointRadius + i * mTwoPointLengthValue - mTwoPointLengthValue / 2;int tempEnd = tempStart + mTwoPointLengthValue;if (tempStart < mStart + mBigPointRadius) tempStart = mStart + mBigPointRadius;if (tempEnd > mEnd - mBigPointRadius) tempEnd = mEnd - mBigPointRadius;canvas.drawLine(tempStart, mHorizontalValue, tempEnd, mHorizontalValue, mLinePaint);}}

竖直的VerticalStepView,实现方式也基本如下:

@Overrideprotected void onDraw(Canvas canvas) {if(mPointCount < 2 || mDatas == null) return;//画竖直的粗线drawLine(canvas) ;//画粗线上的大圆点drawPoint(canvas) ;//画右边的文字drawText(canvas) ;}

源码下面会给出,也基本就这个样子

源码
好了,就这样了。。。

android 步骤指示器实现相关推荐

  1. Android自定义步骤指示器

    一,前言 本人编写博客是为了记录自己的成长过程,把自己的每一个知识点都记录下来,避免在新知识的冲击下印象衰退 二,背景 前些天公司有一个用户引导的需求,上方有个步骤指示器,虽然用简单的view+背景色 ...

  2. android进度指示器_等待的痛苦—浏览进度指示器地狱的7个级别

    android进度指示器 by Mike Zetlow 由Mike Zetlow 等待的痛苦-浏览进度指示器地狱的7个级别 (The Pain of Waiting - Navigating the ...

  3. android 横向stepview,Android 流程指示器 StepView

    软件介绍 StepView 是Android平台下自定义的流程指示器. 效果图: 使用: android:id="@+id/step_view0" android:layout_w ...

  4. Android ViewPager指示器

    一个values文件 attrs_universal_indicator.xml文件 <?xml version="1.0" encoding="utf-8&quo ...

  5. android 圆点指示器,ViewPager加上小圆点指示器效果

    分析 环境 环境:Android Studio 4.0 语言:Java 特点:简单,易懂,效果爆炸 效果 效果2.gif ViewPager类的来历 ViewPager是android扩展包v4包中的 ...

  6. android banner指示器高度,Android 广告轮播 -ConvenientBanner 指示器大小、bottomMargin,leftMarfin的修改。...

    在Android开发时,广告轮播我的项目是使用的ConvenientBanner 来实现的,效果也很好.但是有一个很严格的设计师,需要完全按照她的设计来实现,突然发现ConvenientBanner ...

  7. Android Tablayout 指示器长度修改

    其实我们大多时候是这两个需求,一个自带的属性就搞定,还有就是自定义(根据TabLayout的版本来决定写法) 1.app:tabIndicatorFullWidth="false" ...

  8. Android MagicIndicator 指示器 导航

    由于一直使用的FlycoTabLayout 很久没有维护了,所以毅然决然找一个新的框架. https://github.com/hackware1993/MagicIndicator 首先把六个自定义 ...

  9. uniapp 离线打包Android步骤及未配置appkey或配置错误

    1,首先根据这个大哥的步骤来 离线打包具体步骤 APPkey获取网站 在第一个链接里面如果导入项目HBuilder-Integrate-AS报错了,说一些maven的pom没找到,点击file 然后点 ...

最新文章

  1. JavaScript基础学习--事件代理
  2. 超强平衡机器人,走钢丝、玩忍者步伐,还可以做瑜伽动作,不受干扰的那种 | IEEE 2020...
  3. python3命令记忆技巧_Python3学习笔记-回忆并复述是加强记忆的好方式!
  4. Python 打包 exe 程序避坑指南:没有安装包也能运行小程序啦~开心
  5. 无线轮播android,Android无限轮播Banner的实现
  6. 求一个整数n对16求商和余数
  7. 使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器
  8. ubuntu nginx配置负载均衡篇(二)
  9. 康纳的表情包(思维)
  10. 泡泡玛特回应与肯德基联名引发炒作:暂停食品行业的定制盲盒业务
  11. golang websocket 聊天室demo
  12. 2005-10-22 风波
  13. 简述网桥的特点_网桥的特点
  14. 如何使用swagger的API接口获取数据并且封装
  15. 公司性格测试,来一发
  16. 计算机游戏155,MAME0.155经典1430款游戏合集
  17. 无尽神域服务器维护,无尽神域辅助介绍_脚本功能大全
  18. 常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(一)
  19. [jni] [android] 用C++开发安卓程序
  20. 清华生命学院 2017 就业报告:就业率仅 51%

热门文章

  1. 哔哩哔哩软测工程师面试题
  2. 锁相环 CD4046 的应用
  3. Nordic系列芯片讲解十(修改nordic系列芯片的广播名)
  4. [ecshop 支付接口 开发调试] ecshop 需要做一些支付接口,和接口升级,经常需要支付返回
  5. 重庆计算机上机操作试题,重庆市计算机等级考试C语言上机模拟试题答...doc
  6. Oracle格式化日期:yyyy年mm月dd日
  7. 网站页面实现分享到微信、QQ空间新浪微博等网站的方法
  8. java set遍历方式_java中的Set的使用以及各种遍历方法(较为全面)
  9. [语音识别] kaldi -- aidatatang_200zh脚本解析:词典准备
  10. java蜘蛛纸牌教学视频_南通java学习班费用