做项目的过程中呢,有个需求,要做出一个跟时间轴差不多的效果的页面,于是找了部分资料,基本上都是用ExpandableListView来实现这一效果的,于是开始着手了,我也要开始写我的项目了,先写个Demo,自己项目中当然还要自己去进行写优化什么的,先把类似效果实现出来再管项目啦。

Demo效果图

大概就是上图效果啦,有时候项目中发帖子什么的页面,就有时间记录什么的,然后旁边就是展现帖子的概要情况,当然页面不会这么简陋啦,实际项目根据需求来写出漂亮的布局什么,原理都差不多啦,好啦,开始贴Demo代码啦。

MainActivity.java

public class MainActivity extends AppCompatActivity {

private ExpandableListView elvTimerShaft;

private TimerShaftAdapter adapter;

private String datas = "[{\"time\":1456761600,\"data\":[{\"title\":\"title\",\"content\":\"新人报到啦啦啦啦啦\"},{\"title\":\"标题咯\",\"content\":\"新人报到\"}]},{\"time\":1455638400,\"data\":[{\"title\":\"我\",\"content\":\"哈哈哈哈哈哈\"}]},{\"time\":1453651200,\"data\":[{\"title\":\"新人报道\",\"content\":\"签到啦\"}]}]";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

elvTimerShaft = (ExpandableListView) findViewById(R.id.elv_timer_shaft);

List parents = JSON.parseArray(datas, TimeShaftParentBean.class);

adapter = new TimerShaftAdapter(MainActivity.this, parents);

elvTimerShaft.setAdapter(adapter); // 遍历所有group,将所有项设置成默认展开

for (int i = 0; i < parents.size(); i++) {

elvTimerShaft.expandGroup(i);

}

elvTimerShaft.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {

@Override

public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {

return true;

}

});

}

}

TimerShaftAdapter.java

public class TimerShaftAdapter extends BaseExpandableListAdapter {

private LayoutInflater inflater = null;

private Context mContext;

private List timeShaftParentBeans;

public TimerShaftAdapter(Context context, List timeShaftBeans) {

inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

this.timeShaftParentBeans = timeShaftBeans;

this.mContext = context;

}

@Override

public int getGroupCount() {

return timeShaftParentBeans.size();

}

@Override

public int getChildrenCount(int groupPosition) {

String data = timeShaftParentBeans.get(groupPosition).getData();

List childBeans = JSON.parseArray(data, TimeShaftChildBean.class);

return childBeans.size();

}

@Override

public Object getGroup(int groupPosition) {

return timeShaftParentBeans.get(groupPosition);

}

@Override

public Object getChild(int groupPosition, int childPosition) {

String data = timeShaftParentBeans.get(groupPosition).getData();

List childBeans = JSON.parseArray(data, TimeShaftChildBean.class);

return childBeans.get(childPosition);

}

@Override

public long getGroupId(int groupPosition) {

return groupPosition;

}

@Override

public long getChildId(int groupPosition, int childPosition) {

return childPosition;

}

@Override

public boolean hasStableIds() {

return false;

}

@Override

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

GroupViewHolder groupHolder = null;

if (convertView == null) {

convertView = inflater.inflate(R.layout.item_parent, null);

groupHolder = new GroupViewHolder();

groupHolder.tvDay = (TextView) convertView.findViewById(R.id.tv_day);

convertView.setTag(groupHolder);

} else {

groupHolder = (GroupViewHolder) convertView.getTag();

}

String time = timestamp2StrTime(timeShaftParentBeans.get(groupPosition).getTime());

groupHolder.tvDay.setText(time);

return convertView;

}

@Override

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

ChildViewHolder childHolder = null;

TimeShaftChildBean childBean = (TimeShaftChildBean) getChild(groupPosition, childPosition);

if (convertView == null) {

convertView = inflater.inflate(R.layout.item_child, null);

childHolder = new ChildViewHolder();

childHolder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);

childHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_content);

convertView.setTag(childHolder);

} else {

childHolder = (ChildViewHolder) convertView.getTag();

} childHolder.tvTitle.setText(childBean.getTitle());

childHolder.tvContent.setText(childBean.getContent());

return convertView;

}

@Override

public boolean isChildSelectable(int groupPosition, int childPosition) {

return false;

}

private class GroupViewHolder {

TextView tvDay;

}

private class ChildViewHolder {

TextView tvTitle;

TextView tvContent;

}

public String timestamp2StrTime(String timestamp) {

String result = "";

SimpleDateFormat sdf = new SimpleDateFormat("MM.dd");

long time = Long.valueOf(timestamp);

result = sdf.format(new Date(time * 1000L));

return result;

}

}

TimeShaftChildBean.java

public class TimeShaftChildBean {

private String _id; // id

private String title; // 标题

private String content; // 内容

public String get_id() {

return _id;

}

public void set_id(String _id) {

this._id = _id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

}

TimeShaftParentBean.java

public class TimeShaftParentBean {

private String time;

private String data;

public String getTime() {

return time;

}

public void setTime(String time) {

this.time = time;

}

public String getData() {

return data;

}

public void setData(String data) {

this.data = data;

}

}

activity_main.xml

activity_main.xml

item_parent.xml

item_parent.xml

item_child.xml

item_child.xml

bg_point_gray.xml

bg_point_gray.xml好啦,到此为止,Demo实现的全部代码都有啦,因为数据一般都是从接口请求的,所以我这里demo给的也是Json格式的数据,然后用fastjson进行的解析工作,当然,我觉得这个时间轴的实现,主要还要了解ExpandableListView的使用,之前父布局和子布局都是用的RelativeLayout包裹,发现那根竖线总是不能自适应的连接起来,很奇怪,然后换成FrameLayout布局包裹,突然就好起来了,也不知道为什么,总之,效果实现了,根据这个做做修改,就能搞定实际项目需求啦。

android如何动态显示时间轴,Android时间轴的实现相关推荐

  1. Android 系统(201)---Android 自定义View实战系列 :时间轴

    Android 自定义View实战系列 :时间轴 Android开发中,时间轴的 UI需求非常常见,如下图: 本文将结合 自定义View & RecyclerView的知识,手把手教你实现该常 ...

  2. android自定义横向时间轴,Android自定义时间轴的实现过程

    本文讲述Android自定义时间轴的实现过程,供大家参考,具体内容如下 时间轴效果,实际上非常简单,就是listView中一个又一个的条目而已-.大家可以只关注一个条目. 首先展示一个条目的布局效果 ...

  3. android自定义view,时间刻度尺,时间轴,视频轴

    TimeRuler 最新版见github地址(欢迎star):https://github.com/huangdali/TimeRuler 时间轴.时间刻度尺 继承至TextureView,效率更高 ...

  4. Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!

    Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...

  5. Android自定义View之ListView实现时间轴效果:我只是个送快递的。

    先上效果图: 实现时间轴的原理 listview的基本使用,相信大家都很熟悉.先在layout下新建一个xml布局文件,对应一个子项的listView的显示内容.在上面的图我们可以看到,每一项都是 有 ...

  6. 利用QT实现X轴为时间动态显示曲线

    /**********************************************************************************Author: zyh*Versi ...

  7. android自定义起止时间的时间刻度尺,Android 自定义View篇(六)实现时钟表盘效果...

    前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...

  8. android 标签云的实现 关于x轴 冒泡排序~瞬间让你高达上

    直接贴代码不解释 package com.js.cloudtags;import java.util.LinkedList; import java.util.Random; import java. ...

  9. R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间、将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间

    R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间.将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间(duration of an act ...

  10. R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间、将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间、适应时间段跨越多天的情况

    R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间.将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间.适应时间段跨越多天的情况(例如,当天 ...

最新文章

  1. libtorch error C1021: 无效的预处理器命令“warning”
  2. 自己写一个最简单的bootloader_jz2440
  3. html的区域大小,JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性...
  4. 全站仪数据导入电脑_三鼎762R系列全站仪的SD卡传输教程
  5. 关于MySql插入数据的乱码问题
  6. 使用gdal和java对TIF格式正射影像进行拉普拉斯锐化
  7. 解决:Please specify a different SDK name--PyCharm报错
  8. 原码、反码、补码,以及负数的位操作
  9. H5支付完整demo及问题总结【已解决】
  10. MySQL学习记录 (四) ----- SQL数据管理语句(DML)
  11. python练习题及答案-python编程练习题和答案.doc
  12. 拓端tecdat|使用R语言进行多项式回归、非线性回归模型曲线拟合
  13. 安卓 linux arm go,go arm、android版本
  14. flask html 得到文本框 input的内容_Python的Web框架Flask + Vue 生成漂亮的词云
  15. android使用protobuf实现网络订单管理功能
  16. idea添加xsd文件
  17. 2019-9-9,中兴笔试
  18. vue axios封装
  19. UEditor自定义工具栏图标
  20. Engineering Mathematic I -- Notes 1

热门文章

  1. LeetCode刷题报告2
  2. 团战可以输、提莫必须死
  3. React路由 简单实现一个导航
  4. 利用Navicat导入Excel数据到数据库
  5. 股神巴菲特十大致富秘籍
  6. 前端使用RSA对密码进行加密
  7. 使用element table表格实现后端排序
  8. SAP HANA2.0数据库安装
  9. Java虚拟机(一)—— 虚拟机原理
  10. “构建之法”--第一次作业-阅读与准备工作