最近在弄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. 谷歌大神为你解释Kubernetes, 微服务和容器化
  2. 一文看尽10篇目标检测最新论文(MetaOD/P-RSDet/MatrixNets等)
  3. ic读卡器设置工具_从Matlab被禁来看,给IC教育带来哪些启发?
  4. Hadoop开发第6期---HDFS的shell操作
  5. 在JavaScript中定义枚举的首选语法是什么? [关闭]
  6. Java 输入输出流 转载
  7. python 基线拟合
  8. SECS/GEM开发指导
  9. Mac电脑没声音了怎么办?
  10. java 滚动字幕_Java程序 实现图形面板上的字幕滚动效果
  11. 前端html制作中国地图,echarts实现中国地图
  12. 检查一个字符串是否为回文 回文:正着念与反着念一样,例如:上海自来水来自海上;要求用户从控制台输入一个email地址,然后获取该email的用户名(@之前的内容)
  13. 综合日语第一册第十二课
  14. Lumiprobe丨Lumizol RNA 提取试剂解决方案
  15. uni-app 实现记住账号密码功能
  16. unraid安装黑群晖虚拟机开机显示 Starting Kernel with USB boot
  17. 单8通道数字控制模拟电子开关CD4051
  18. 使用_findfirst和_findnext遍历目录
  19. 人大金仓KingbaseES数据库管理入门
  20. Ask Tom之中英文对照20051228——PL/SQL函数返回CLOB类型值

热门文章

  1. 运维之道 | MySQL主从复制、主主复制
  2. ernieSAGE:PGL at TextGraphs 2020 Shared Task: Explanation Regeneration using Language and Graph Lear
  3. 广告词检测对运营的应用场景
  4. 求logx(c++基础)
  5. 【Autoware】三、ROSBAG生成waypoint
  6. opencv Mser的用法
  7. Maven问题总结及配置私服或公共仓库
  8. Cortex-M3 异常和中断---基于NXP LPC177x/8x
  9. 数字经济倒逼产业集约化发展,可视化构建物流一体化监管
  10. FFmpegSDL教程:用不到1000行代码写一个播放器