最近遇到一个项目需要实现如下图这种流程

看了网上很多都是要自定义时间轴配合ListView来实现,但是本项目的流程又区别于淘宝物流的跟踪图,所以自己写了一个流程图,代码如下:

item的布局 view_process_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/col_ffffff"android:orientation="vertical"xmlns:tools="http://schemas.android.com/tools"><LinearLayoutandroid:id="@+id/ll_content"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><RelativeLayoutandroid:layout_width="120dp"android:layout_height="40dp"android:layout_gravity="center_vertical"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="5dp"android:textSize="@dimen/text_12sp"android:textColor="@color/col_3f6db7"tools:text="撰写审计日志"/><TextViewandroid:id="@+id/tv_date"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/tv_title"android:paddingLeft="5dp"android:textSize="@dimen/text_12sp"android:textColor="@color/col_3f6db7"tools:text="2018-12-10 10:50"/></RelativeLayout><LinearLayoutandroid:id="@+id/ll_line"android:layout_width="14dp"android:layout_height="wrap_content"android:orientation="vertical"android:gravity="center_horizontal"><TextViewandroid:id="@+id/line_before"android:layout_width="1dp"android:layout_height="40dp"android:background="@color/col_3f6db7"android:gravity="center_horizontal"/><TextViewandroid:layout_width="14dp"android:layout_height="14dp"android:background="@drawable/shape_circle_process"/><TextViewandroid:id="@+id/line_after"android:layout_width="1dp"android:layout_height="40dp"android:background="@color/col_3f6db7"android:gravity="center_horizontal"/></LinearLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:minHeight="40dp"android:padding="2dp"android:layout_gravity="center"android:gravity="center_vertical"android:background="@drawable/shap_tangle_bg"><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="@dimen/text_15sp"tools:text="张三"/><TextViewandroid:id="@+id/tv_advice"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_toRightOf="@id/tv_name"android:layout_marginLeft="10dp"android:textSize="@dimen/text_15sp"tools:text="同意"/><TextViewandroid:id="@+id/tv_result"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_name"android:textSize="@dimen/text_15sp"tools:text="审核同意地方撒还记得哈返回撒到了范德萨看了凤凰读书了发大水范德萨范德萨发生"/></RelativeLayout></LinearLayout>
</LinearLayout>

自定义的drawable:

1.进度节点圆圈  shape_circle_process.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<corners android:radius="7dp"/><solid android:color="@color/col_3f6db7"/>
</shape>

2.审批内容背景 shape_tangle_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<stroke android:color="@color/col_636363" android:width="1px"/><solid android:color="@color/col_f0f0f0"/>
</shape>

Activity中的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@color/col_ffffff"tools:context=".business.table.tack.ProcessTakeTableActivity"><ScrollViewandroid:id="@+id/scrollview"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayoutandroid:id="@+id/rlt_begin"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="110dp"android:layout_marginTop="20dp"android:gravity="center_vertical"android:visibility="gone"><ImageViewandroid:id="@+id/iv_begin"android:layout_width="35dp"android:layout_height="35dp"android:src="@drawable/icon_process_time"/><TextViewandroid:id="@+id/tv_begin"android:layout_width="wrap_content"android:layout_height="35dp"android:layout_marginLeft="10dp"android:layout_toRightOf="@id/iv_begin"android:gravity="center_vertical"android:minHeight="20dp"android:textColor="@color/col_3f6db7"android:textSize="@dimen/text_18sp"android:text="流程开始"/></RelativeLayout>
<LinearLayoutandroid:id="@+id/ll_process_container"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"/><RelativeLayoutandroid:id="@+id/rlt_end"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="110dp"android:layout_marginBottom="20dp"android:visibility="gone"><ImageViewandroid:id="@+id/iv_end"android:layout_width="35dp"android:layout_height="35dp"android:src="@drawable/icon_process_time"/><TextViewandroid:id="@+id/tv_end"android:layout_width="wrap_content"android:layout_height="35dp"android:layout_marginLeft="10dp"android:layout_toRightOf="@id/iv_end"android:gravity="center_vertical"android:minHeight="20dp"android:layout_alignBaseline="@id/iv_end"android:textColor="@color/col_3f6db7"android:textSize="@dimen/text_18sp"android:text="流程结束"/></RelativeLayout></LinearLayout></ScrollView><TextViewandroid:id="@+id/tv_no_process_data"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="@string/no_data"android:visibility="gone"/>
</LinearLayout>

其中rlt_begin为流程开始的布局,ll_process_container控件为动态添加流程的容器,alt_end为流程结束的布局。

Activity中的代码:

initProcessView();//此方法为动态添加流程子节点的方法

Activity具体代码如下:

 @BindView(R.id.scrollview)ScrollView scrollView;/**无数据提示*/@BindView(R.id.tv_no_process_data)TextView tvNoDate;/**审批流程容器*/
@BindView(R.id.ll_process_container)LinearLayout llProcessContainer;@BindView(R.id.rlt_begin)RelativeLayout rltBegin;@BindView(R.id.rlt_end)RelativeLayout rltEnd;/**流程节点集合*/private List<GetProcessTakeTableBean> processList=new ArrayList<>();private void initProcessView() {llProcessContainer.removeAllViews();for(int i = 0; i <processList.size();i++){LinearLayout linearLayout= (LinearLayout) LayoutInflater.from(this).inflate(R.layout.view_process_item,null);TextView tvTitle=linearLayout.findViewById(R.id.tv_title);TextView tvDate=linearLayout.findViewById(R.id.tv_date);TextView tvName=linearLayout.findViewById(R.id.tv_name);TextView tvAdvice=linearLayout.findViewById(R.id.tv_advice);TextView tvResult=linearLayout.findViewById(R.id.tv_result);TextView tvLineAfter=linearLayout.findViewById(R.id.line_after);if(StringUtil.isNotEmpty(processList.get(i).getNode_NAME())){tvTitle.setText(processList.get(i).getNode_NAME());}if(processList.get(i).getHandletime() != 0){tvDate.setText(DateUtils.millis2String(processList.get(i).getHandletime(),"yyyy-MM-dd HH:mm"));}if(StringUtil.isNotEmpty(processList.get(i).getHandler_NAME())){tvName.setText(processList.get(i).getHandler_NAME());}if(StringUtil.isNotEmpty(processList.get(i).getHandle_ADVICE())){tvAdvice.setText(processList.get(i).getHandle_ADVICE());}if(StringUtil.isNotEmpty(processList.get(i).getHandle_RESULT())){tvResult.setVisibility(View.VISIBLE);tvResult.setText(processList.get(i).getHandle_RESULT());}else{tvResult.setVisibility(View.GONE);}rltBegin.setVisibility(View.VISIBLE);int status=processList.get(i).getAudit_LEVEL();switch (status){case 0:case 1:case 2:rltEnd.setVisibility(View.GONE);if(i == processList.size()-1){tvLineAfter.setVisibility(View.GONE);}break;case 3:rltEnd.setVisibility(View.VISIBLE);break;default:break;}llProcessContainer.addView(linearLayout);}
}

上面的代码就是动态添加子节点数据的方法!当没有进程时,默认显示暂无相关数据的TextView,有数据时显示流程图!processList中存放的数据对象换成你自己的对象即可,亲测没有什么适配问题,如发现有bug,或有更好的方法请反馈于我。

仿淘宝物流的跟踪图,不需要自定义时间轴相关推荐

  1. 仿淘宝详情页轮播图效果实现

    仿淘宝详情页轮播图效果实现 图片路径记得修改.js源文件记得导入! <!doctype html>  <head>   <meta charset="UTF-8 ...

  2. 一步一步教你写股票走势图——分时图二(自定义xy轴)

    目录 一步一步教你写股票走势图--分时图一(概述) 一步一步教你写股票走势图--分时图二(自定义xy轴) 一步一步教你写股票走势图--分时图三(对齐图表.自定义柱状图高亮) 一步一步教你写股票走势图- ...

  3. 可视化框架、Axure原型、大屏可视化、图表组件、图表元件库、统计图表、数据可视化模板、条形图、折线图、散点图、时间轴、仪表盘、饼图、散点图、雷达图、高山图、登录模板、弹窗、弹幕、预警、散点图

    可视化框架.数据可视化综合管理平台.大屏可视化.图表组件.图表元件库.统计图表.数据可视化模板.条形图.折线图.散点图.时间轴.仪表盘.饼图.散点图.雷达图.高山图.登录模板.弹窗.弹幕.预警.散点图 ...

  4. QChart绘制占比图,但是以时间轴为X轴

    需求:需要绘制比例图,而且是随着时间不停地增加,比例直方图会越来越多,x轴的字符串也越来越多,但随着变多,x轴会被省略掉,所以我需要能够动态增删X轴的直方图,既不丢失数据又不增多X轴的字符串: 问题: ...

  5. android 分时图x轴宽度,一步一步教你写股票走势图——分时图二(自定义xy轴)...

    目录 一步一步教你写股票走势图--分时图一(概述) 一步一步教你写股票走势图--分时图二(自定义xy轴) 一步一步教你写股票走势图--分时图三(对齐图表.自定义柱状图高亮) 一步一步教你写股票走势图- ...

  6. python绘制时间轴_python – matplotlib图中的链接时间轴(x轴)

    这是基于生成第二个x轴,如上一篇文章所述: 下面是生成具有两个x轴的图的代码,该图表示相同数据的两个不同时间单位:相对时间(rel_time)和绝对时间(abs_time).虽然上述方法很好地生成了两 ...

  7. 用html css JavaScript写一个功能全面的王者荣耀轮播图 (仿淘宝京东轮播图)通俗易懂

    首先分析一下案例需求: 1.鼠标经过 就显示隐藏左右按钮 2.动态生成小圆圈  有几张图片,就生成几个小圆圈 3.点击小圆圈,移动图片    当然移动的是 ul(大盒子) 4.点击左右按钮, 图片滚动 ...

  8. 简单玩转ViewPager+Fragment动画效果,实现京东淘宝物流卡片效果 (附源码)

    物流卡片Demo 新版的京东和淘宝有一个交互感觉不错, 待收货订单会有类似探探那样的卡片效果, 滑动查看下一条物流的信息, 近期UI部门说要做这个效果, 于是我就写了一个Demo, 现在分享出来和大家 ...

  9. JAVA实现类似淘宝物流路线图

    前言 如何实现类似淘宝.京东.拼多多的物流轨迹路线图,实现订单物流更直观更有效的展示. 准备工作 这里使用的快递100提供的API,需要一个快递100的账号. Step 1 注册快递100账号,已有账 ...

最新文章

  1. bitmap格式分析
  2. canal 监听不到数据变化_数据的异构实战(二)手写迷你版同步工程
  3. ReentrantLock重入锁
  4. 【交互】【随机】Lost Root(CF1061F)
  5. Biscuit – 超方便的多开浏览器[Win/macOS/Linux]
  6. jQuery操作radio、checkbox、select 集合
  7. 双击背面截图_如何通过点击iPhone背面快速截图,只需一个简单设置
  8. springmvc框架使用拦截器实现301永久重定向,其实用过滤器应该是更好
  9. nodejs python性能_监控Nodejs的性能
  10. Eclipse 中最常用的快捷键大全
  11. 二调建设用地地类代码_最新二调土地地类代码表
  12. Linux网络编程 ——Select机制
  13. ctfshow 做题 MISC入门 模块1-10
  14. 找出java重复字符串,java 找出字符串出现重复的字符和次数
  15. PINGTELNET
  16. 圆柱坐标轴对称热弹性体基本方程
  17. resultful接口开发
  18. adb shell top
  19. 想要在华为云上部署javaweb项目怎么做
  20. linux界面回收站图标没了,Ubuntu美化教程:在AWN中添加“显示桌面”和“回收站”图标...

热门文章

  1. 卸载360安全卫士带来的悲剧
  2. 网站外链建设入门指南
  3. TYPE-C接口引脚详解
  4. C++异常处理 详解
  5. golang扫描端口
  6. 填坑:Windows下使用OpenSSL生成自签证书(很简单,一个晚上搞明白的,让后来者少走弯路)...
  7. ArcEngine线分割面的实现方法
  8. “我没有说谎,我何必说谎”,AI可以判断歌曲表达的情绪
  9. android ios 开发框架,腾讯开源新生移动跨端开发框架Hippy:支持iOS、安卓
  10. 史上功能完整强大的android下载管理器