时间轴的实现(简单到爆炸)

标签(空格分隔): 开源项目


###首先看下实现的效果图

####开始运输

####结束运输
![](http://upload-images.jianshu.io/upload_images/1316820-80582f78e4c8be72.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###原理分析 其实这个真的没什么困难的,之前还以为是一个不太容易的点,但是如果牵涉到了自定义view,那么就会有点功底了(自定义view),但是如果对于时间轴比较多,那么对于自定义view就会出现性能问题,过度绘制。 还有的就是我们可以分析一下这个时间轴,我们可以发现基本就是好多item进行的扩展,可能第一个(快递类比)和最后一个会有所不同,但是其余都是一样的,第一个和最后一个我们可以控制红线的显示(第一个上面红线不显示,最后一个红线下方不显示),要说原理也就这么多,我也没办法在详细了(关键不知道怎么说了啊,他就是一个ListView或者RecyclerView啊,放过我吧。。。。)

###直接代码 ####首先我们来看下json定义吧

  • 说明一下:这里我们的时间,如果是真的项目中,我们的时间应该是一个时间戳,然后我们去获取到时间,然后进行DataFormat,也可以是类似于我这样定义的,这个就看后端怎么定义的了,还有我这边定义的字段比较少,只是用来满足一下UI显示,详情还需要看自己的公司产品需求啊
{"datas": [{"time": "2017.05.05-16:20","type": "0","address": "您的快递将要揽收,开始转运"},{"time": "2017.05.05-19:51","type": "1","address": "浙江省杭州市萧山中部公司 已收件"},{"time": "2017.05.05-20:55","type": "1","address": "浙江省杭州市萧山中部公司 已打包"},{"time": "2017.05.05-22:59","type": "1","address": "浙江省杭州市萧山中部公司 已发出,下一站 杭州转运中心"},{"time": "2017.05.05-20:55","type": "1","address": "杭州转运中心公司 已收入"},{"time": "2017.05.05-22:09","type": "1","address": "杭州转运中心公司 已发出,下一站 北京转运公司"},{"time": "2017.05.06-20:55","type": "1","address": "北京转运公司中心 已收入"},{"time": "2017.05.06-21:55","type": "1","address": "北京转运公司中心 已发出,下一站 北京市朝阳区大中华区"},{"time": "2017.05.07-05:55","type": "1","address": "北京市朝阳区酒仙桥 已收入"},{"time": "2017.05.07-06:55","type": "2","address": "北京市朝阳区酒仙桥公司 派件中 电话:112234124"},{"time": "2017.05.07-13:55","type": "3","address": "北京市朝阳区酒仙桥公司 已经签收 签收人:邮件收发章"}],"message": "请求成功","errorCode": "0"
}
复制代码

####接下来我们看下UI吧(其实没什么技术含量。。。)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="100dp"android:orientation="vertical"><Viewandroid:id="@+id/shuxian_up"android:layout_width="2dp"android:layout_height="50dp"android:layout_marginLeft="80dp"android:background="@color/colorAccent"/><Viewandroid:id="@+id/shuxian_down"android:layout_width="2dp"android:layout_marginTop="50dp"android:layout_height="50dp"android:layout_marginLeft="80dp"android:background="@color/colorAccent"/><ImageViewandroid:id="@+id/express_delivery_img"android:layout_width="20dp"android:layout_height="20dp"tools:background="@mipmap/ic_ok"android:layout_centerVertical="true"android:layout_marginLeft="71dp"/><RelativeLayoutandroid:layout_width="70dp"android:layout_height="match_parent"android:gravity="center"><TextViewandroid:id="@+id/tv_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:maxLines="1"android:text="22:09"/><TextViewandroid:id="@+id/tv_data"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/tv_time"android:layout_centerHorizontal="true"android:maxLines="1"android:text="2017.05.06"android:textSize="10sp"/></RelativeLayout><TextViewandroid:id="@+id/tv_address_detail"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="15dp"android:layout_marginRight="15dp"android:layout_toRightOf="@+id/express_delivery_img"android:maxLines="3"tools:text="杭州转运公司 已收入,这边也已经发出了,请注意签收"/></RelativeLayout>
复制代码

####看下我们的Adapter代码

  • onBindViewHolder方法里面的逻辑处理
JavaBean.DatasBean javaBean = mJavaBeen.get(position);if (javaBean.getType().equals("0")){//发出图片holder.mExpressDeliveryImg.setImageResource(R.mipmap.postman_order_sender_icon);} else if (javaBean.getType().equals("1")){//运送中图片holder.mExpressDeliveryImg.setImageResource(R.mipmap.updata_dialog_icon);} else if (javaBean.getType().equals("2")){//派送中图片holder.mExpressDeliveryImg.setImageResource(R.mipmap.logistics_detail_indicator_postman_avatar);} else if (javaBean.getType().equals("3")){//签收中图片holder.mExpressDeliveryImg.setImageResource(R.mipmap.postman_order_receiver_icon);}holder.mTvData.setText(javaBean.getDataAndTime()[0]);holder.mTvTime.setText(javaBean.getDataAndTime()[1]);holder.mTvAddressDetail.setText(javaBean.getAddress());if (position == 0 ){  //如果是第一个位置,上面的红线不显示holder.mShuxianUp.setVisibility(View.INVISIBLE);} else {holder.mShuxianUp.setVisibility(View.VISIBLE);}if (position == mJavaBeen.size()-1){  //如果是最后一个位置,下面的红线不显示holder.mShuxianDown.setVisibility(View.INVISIBLE);} else {holder.mShuxianDown.setVisibility(View.VISIBLE);}
复制代码

####最后看下Activity里面的逻辑吧(真的没什么啊)

 private void initData() {//这个是模拟网络请求,解析assets里面的json文件,如果是真实项目  就请求接口  解析数据  String result = JsonUtils.getJson(this, "express_delivery.json");Gson gson = new Gson();JavaBean javaBean = gson.fromJson(result, JavaBean.class);List<JavaBean.DatasBean> datasBeen = new ArrayList<>();datasBeen = javaBean.getDatas();Collections.reverse(datasBeen);  //数组反转  这个到真实环境的时候就看请求回来的数据和产品的排版方式了mExpressDeliveryAdapter.setJavaBeen(datasBeen);}
复制代码

###写在最后 好了,时间轴就这样简单的实现了,真的没有什么技术含量,只是不要想的过于复杂,有时候就是那么三言两语,两三行代码解决的事情哈,效果图就看上面的就行,这里就不在贴图了啊,要知道图片的成本(穷哈哈哈)很大的啊。 这里就给下代码的地址吧,有用的就直接拿去,不需要和我商量的哈。 https://github.com/wuyinlei/TimelineProject
https://github.com/wuyinlei/TimelineProject
https://github.com/wuyinlei/TimelineProject
重要的事情要说三遍,记住哈,喜欢就给个star吧,开源需要您的支持。

时间轴的实现(简单到爆炸)相关推荐

  1. PhotoShop简单案例(2)——利用时间轴功能制作制作省略号GIF动画

    目录 一.项目介绍 二.基本流程 2.1 新建画布 2.2 输入文字 2.3 增删省略号 2.4 创建视频时间轴 三.效果演示 一.项目介绍 本文将介绍利用时间轴功能制作制作省略号GIF动画,制作完成 ...

  2. UE4学习-虚幻4帮助手册、通过蓝图实现动画效果、添加时间轴、添加声音、C++和蓝图事件关联

    文章目录 虚幻4帮助手册 把一个对象转换成蓝图类 C++和蓝图的关联 添加时间轴 修改defaultPawn 修改door的事件图标 给场景添加声音 虚幻4帮助手册 虚幻4帮助手册 虚幻4帮助手册 虚 ...

  3. CSS- 横向和纵向时间轴

    时间轴在展示公司发展信息,服务流程中用的比较多,常见的注册登录有的是通过引导,一步一步的来完成,上面会通过时间轴告诉用户当前在哪一步,公司在关于我们或者发展流程的时候也特别喜欢用时间轴来展示,简单的实 ...

  4. jQuery时间轴插件:jQuery Timelinr

    这是一款可用于展示历史和计划的时间轴插件,尤其比较适合一些网站展示发展历程.大事件等场景.该插件基于jQuery,可以滑动切换.水平和垂直滚动.支持键盘方向键.经过扩展后可以支持鼠标滚轮事件. 查看演 ...

  5. android时间轴折线图,echarts时间轴折线图

    当使用echarts折线图时,每个数据会打点,在数据量小的时候,美观又快捷,但是当数据量过大时,会非常的卡,以及不美观 例如: series: { symbol:'circle', } > EC ...

  6. 3D场景搭建的隐秘功能——时间轴

    模模搭(CampusBuilder)搭建3D可视化场景简单好用的特点已经深入人心,但其实模模搭还有许多有趣的特殊效果设置,但是很多小伙伴都把重心放在搭建3D场景上,忽略了这些有趣的效果.关于这些隐藏功 ...

  7. Camtasia实用技巧之时间轴

    通常在录制完视频后我们会对视频进行相关的修改操作,而在修改时,不可避免的要对Camtasia的时间轴进行操作.下面我用Camtasia 2020(Win版)来为大家介绍一些时间轴操作的小技巧. Cam ...

  8. Timeline 3D for Mac(时间轴记事本软件)

    想要随时记录您的账单.支出收入.家谱等,就来下载Timeline 3D for Mac吧!Timeline 3D Mac版是一款运行在macOS平台上的时间轴记事本软件,Timeline 3D Mac ...

  9. android时间轴左右交叉布局,快速简单的定制一个时间轴布局(LinearLayout)

    github: 先上图: 很多情况下,我们都会遇到需要类似于时间轴的一个布局,网上也有很多,但是很多情况下我们其实并不需要那么多库,毕竟64k限制就在那,不管我们用还是不用,它依然在那... 而且更多 ...

最新文章

  1. php redis support,PHP 使用 Redis
  2. 金融风控实战——Hive详解(数据读取、预处理、特征工程)
  3. 工业机器人调运角度_站在全球角度,看待中国工业机器人
  4. 两个链表第一个公共节点
  5. C++day13 学习笔记
  6. s7300plc串口通信_s7-300串口通讯.ppt
  7. gluoncv 目标检测,训练自己的数据集
  8. 使用“牛顿迭代法”求解方程
  9. 背包九讲----整理+例题
  10. 迅雷极速版任务出错的解决办法(亲测可用)
  11. linux 系统安装Iso,linux系统安装iso文件方法
  12. 华三交换机 流量镜像
  13. android webview html 字体大小,Android webview设置字体大小,适配屏幕,夜间模式
  14. 第二篇 第三章防火防烟分区检查(一)
  15. STM32中断中调用OLED显示出现OLED花屏
  16. CNC系统G代码M代码大全
  17. 递增序列-2019年蓝桥杯国赛填空题题目答案及分析
  18. # MASA MAUI Plugin (十)iOS消息推送(原生APNS方式)
  19. 【PAT甲级 - C++题解】1147 Heaps
  20. 开源安卓Android流媒体音视频播放器实现声音自动停止、恢复、一键静音功能源码

热门文章

  1. java共享锁排它锁_java 实现共享锁和排它锁
  2. vscode,git提交push,需要每次都输入账号密码username,password
  3. TaoLer V1.7.12版本简单迅捷的轻论坛系统源码
  4. 项目是采用目前比较流行的 SpringBoot/SpringCloudAlibaba构建新零售微服务电商项目
  5. 2011年白银机会远超黄金 四妙招帮您赚大
  6. 通过代码生成机制实现强类型编程-CodeSimth版
  7. SVG 教程 (五)文本,Stroke 属性,SVG 滤镜,SVG 模糊效果
  8. PHP+jQuery+MySql实现红蓝投票功能
  9. Ubuntu工具zsh和Byobu
  10. 隐藏PHP扩展名-修改apache