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

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

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


首先看下实现的效果图

开始运输


结束运输

原理分析

其实这个真的没什么困难的,之前还以为是一个不太容易的点,但是如果牵涉到了自定义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"
               >

    <View
        android:id="@+id/shuxian_up"
        android:layout_width="2dp"
        android:layout_height="50dp"
        android:layout_marginLeft="80dp"
        android:background="@color/colorAccent"/>

    <View
        android:id="@+id/shuxian_down"
        android:layout_width="2dp"
        android:layout_marginTop="50dp"
        android:layout_height="50dp"
        android:layout_marginLeft="80dp"
        android:background="@color/colorAccent"/>

    <ImageView
        android: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"/>

    <RelativeLayout
        android:layout_width="70dp"
        android:layout_height="match_parent"
        android:gravity="center">

        <TextView
            android: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"/>

        <TextView
            android: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>

    <TextView
        android: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吧,开源需要您的支持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,846评论 6 13
  • 1、时间轴效果 我们要实现的时间轴效果如下图所示,这是锤子手机的查看物流信息界面的截图。 2、主要布局的实现 在T...
    独毒火阅读 12,891评论 6 16
  • 在即将过去的十八年的记忆里,我做过的一些疯狂的事情好像可以用十根手指头就能数清楚。 那个时候是2007年,小学五年...
    疲倦少女阅读 222评论 1 1
  • 一直有隐隐的遗憾,总是觉得不够被爱,也渐渐觉察到自己也不够爱人。 可是,明明知道他很爱我,自然也知道,我很爱他。 ...
    小红和小火阅读 688评论 0 0
  • 博士 经济金融 更好的学习能力,更高的思辨能力,更好的贯通能力。 企业最好的医生。
    freshriver阅读 217评论 0 0