使用ExpandableListView实现时间轴效果

不废话,先上图,看看效果

这是用ExpandableListView来实现时间轴效果,原理比较简单,以月份为第一级,以天为第二级来实现的。

package com.hj.main;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnGroupClickListener;

import com.hj.adapter.StatusExpandAdapter;
import com.hj.entity.OneStatusEntity;
import com.hj.entity.TwoStatusEntity;
import com.sanrenx.main.R;
/**
 * 时间轴
 * @author shuiji
 *
 */
public class MainActivity extends Activity {
	private static final String TAG = "haijiang";
	private List<OneStatusEntity> oneList;
	private ExpandableListView expandlistView;
	private StatusExpandAdapter statusAdapter;
	private Context context;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		context = this;
		expandlistView = (ExpandableListView) findViewById(R.id.expandlist);

		putInitData();

		statusAdapter = new StatusExpandAdapter(context, oneList);
		expandlistView.setAdapter(statusAdapter);
		expandlistView.setGroupIndicator(null); // 去掉默认带的箭头

		// 遍历所有group,将所有项设置成默认展开
		int groupCount = expandlistView.getCount();
		for (int i = 0; i < groupCount; i++) {
			expandlistView.expandGroup(i);
		}
		expandlistView.setOnGroupClickListener(new OnGroupClickListener() {

			@Override
			public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
				// TODO Auto-generated method stub
				return true;
			}
		});

	}

	private void putInitData() {
		String[] strArray = new String[]{"6月", "7月", "8月"};
		String[] str1 = new String[]{"抓娃娃,买100送1000", "抓娃娃,买100送100", "抓娃娃,买100送500", "抓娃娃,买100送2000"};
		String[] str2 = new String[]{"抓娃娃,买100送100", "抓娃娃,买100送1000", "抓娃娃,买100送1000", "抓娃娃,买100送500"};
		String[] str3 = new String[]{"抓娃娃,买100送1000", "抓娃娃,买100送1000", "抓娃娃,买100送100", "抓娃娃,买100送1000"};

		String[] timeStr1 = new String[]{"12日\n09:00 AM", "8日\n13:00 AM", "13日\n09:00 AM", "29日\n22:00 AM"};
		String[] timeStr2 = new String[]{"4日\n09:00 AM", "8日\n09:00 AM", "13日\n09:00 AM", "29日\n09:00 AM"};
		String[] timeStr3 = new String[]{"4日\n13:00 AM", "8日\n09:00 AM", "13日\n09:00 AM", "29日\n09:00 AM"};

		oneList = new ArrayList<OneStatusEntity>();
		for(int i=0 ; i<strArray.length ; i++){
			OneStatusEntity one = new OneStatusEntity();
			one.setStatusName(strArray[i]);
			List<TwoStatusEntity> twoList = new ArrayList<TwoStatusEntity>();
			String[] order = str1;
			String[] time = timeStr1;
			switch (i) {
			case 0:
				order = str1;
				time = timeStr1;
				Log.i(TAG, "str1");
				break;
			case 1:
				order = str2;
				time = timeStr2;
				Log.i(TAG, "str2");
				break;
			case 2:
				order = str3;
				time = timeStr3;
				Log.i(TAG, "str3");
				break;
			}

			for(int j=0 ; j<order.length ; j++){
				TwoStatusEntity two = new TwoStatusEntity();
				two.setActionName(order[j]);
				two.setActionTime(time[j]);
				twoList.add(two);
			}
			one.setTwoList(twoList);
			oneList.add(one);
		}
	}
}

下面是适配器代码

package com.hj.adapter;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

import com.hj.entity.OneStatusEntity;
import com.hj.entity.TwoStatusEntity;
import com.sanrenx.main.R;

public class StatusExpandAdapter extends BaseExpandableListAdapter {
	//private static final String TAG = "StatusExpandAdapter";
	private LayoutInflater inflater = null;
	private List<OneStatusEntity> oneList;
	private Context context;

	public StatusExpandAdapter(Context context, List<OneStatusEntity> oneList) {
		this.oneList = oneList;
		inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		this.context = context;
	}

	@Override
	public int getGroupCount() {
		// TODO Auto-generated method stub
		return oneList.size();
	}

	@Override
	public int getChildrenCount(int groupPosition) {
		if(oneList.get(groupPosition).getTwoList() == null){
			return 0;
		}else{
			return oneList.get(groupPosition).getTwoList().size();
		}
	}

	@Override
	public OneStatusEntity getGroup(int groupPosition) {
		// TODO Auto-generated method stub
		return oneList.get(groupPosition);
	}

	@Override
	public TwoStatusEntity getChild(int groupPosition, int childPosition) {
		// TODO Auto-generated method stub
		return oneList.get(groupPosition).getTwoList().get(childPosition);
	}

	@Override
	public long getGroupId(int groupPosition) {
		// TODO Auto-generated method stub
		return groupPosition;
	}

	@Override
	public long getChildId(int groupPosition, int childPosition) {
		// TODO Auto-generated method stub
		return childPosition;
	}

	@Override
	public boolean hasStableIds() {
		// TODO Auto-generated method stub
		return false;
	}

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

		GroupViewHolder holder = new GroupViewHolder();

		if (convertView == null) {
			convertView = inflater.inflate(R.layout.one_status_item, null);
		}
		//设置第一级月份
		holder.groupName = (TextView) convertView.findViewById(R.id.one_status_time);
		holder.group_tiao = (TextView) convertView.findViewById(R.id.group_tiao);

		holder.groupName.setText(oneList.get(groupPosition).getStatusName());
		return convertView;
	}

	@Override
	public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
			ViewGroup parent) {
		ChildViewHolder viewHolder = null;
		TwoStatusEntity entity = getChild(groupPosition, childPosition);
		if (convertView != null) {
			viewHolder = (ChildViewHolder) convertView.getTag();
		} else {
			viewHolder = new ChildViewHolder();
			convertView = inflater.inflate(R.layout.two_status_item, null);
			viewHolder.actionName = (TextView) convertView.findViewById(R.id.action_name);
			viewHolder.child_tiao = (TextView) convertView.findViewById(R.id.tiao);
			viewHolder.actionTime = (TextView) convertView.findViewById(R.id.action_time);
		}
		//设置第二级时间和事件名称
		viewHolder.actionName.setText(entity.getActionName());
		viewHolder.actionTime.setText(entity.getActionTime());
		convertView.setTag(viewHolder);
		return convertView;
	}

	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		// TODO Auto-generated method stub
		return false;
	}

	private class GroupViewHolder {
		TextView groupName;
		public TextView group_tiao;
	}

	private class ChildViewHolder {
		public TextView actionName;
		public TextView actionTime;
		public TextView child_tiao;
	}

}

代码比较简单,重要的地方做了注释,大家可以把代码下载下来修改成自己想要的效果,由于我下载分没有了现在0分,所以收大家一分,莫怪!谢谢

下载地址:点击打开链接

使用ExpandableListView实现时间轴效果

时间: 2024-09-29 22:08:02

使用ExpandableListView实现时间轴效果的相关文章

使用ExpandableListView时间轴效果达到

不废话,首先在地图上,查看结果 这是用ExpandableListView来实现时间轴效果,原理比較简单,以月份为第一级,以天为第二级来实现的. package com.hj.main; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.uti

JS时间轴效果(类似于qq空间时间轴效果)

2013-11-04 23:51 by 空智, 4041 阅读, 15 评论, 收藏, 编辑 在上一家公司写了一个时间轴效果,今天整理了下,感觉有必要写一篇博客出来 给大家分享分享 当然代码还有很多不足的地方,希望大家多指点指点下,此效果类似于QQ空间或者人人网空间时间轴效果,当时也是为了需求 研究了下qq空间逻辑(当然JS代码压缩了肯定看不到的),只是当时研究了下他们HTML结构和css结构,所以仿照他们那种逻辑自己也写了一个出来.先来看看是个什么样的吧!如下图所示: 需求分析:左侧是一个时间

时光轴 时间轴 效果

要实现类似QQ空间那样时光轴 时间轴效果 如图 ==================== 分析:左边 ul的border-left实现,这样会出现底部的 余出的线条,不美观, 所以考虑li的border-left实现. li的padding-bottom撑开上下间距 h4标题的:before实现圆圈,定位到左边. 圆圈的实现使用绝对定位实现,注意下UL和LI实现方式下的,圆圈定位位置. =========Ul实现边框======= .money-process .process-list { w

Android时间轴效果,直接使用在你的项目中

近期开发app搞到历史查询,受腾讯qq的启示,搞一个具有时间轴效果的ui,看上去还能够,然后立即想到分享给小伙伴,,大家一起来看看,先上效果图吧 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 接下来就是代码了,axtivity的布局代码.非常easy.就是一个listview <?xml v

jQuery鼠标滑过横向时间轴效果

jQuery鼠标滑过横向时间轴效果---效果图: jQuery鼠标滑过横向时间轴效果---全部代码: <!DOCTYPE html> <html> <head> <title></title> <link rel="stylesheet" type="text/css" href="css/style.css"> </head> <body> <

CSS3实现时间轴效果

最近打开电脑就能看到极客学院什么新用户vip免费一个月,就进去看看咯,这里就不说它的课程怎么滴了,里面实战路径图页面看到了这个效果: 有点像时间轴的赶脚,而且每一块鼠标悬浮上去也有下拉效果展开介绍截图信息,就感觉效果还不错.但感觉这种效果貌似对于动态添加不是很灵活,因为高度不像宽度可以灵活的自适应,故添加得自己一个一个设置.所以很多都是做成展示效果. 当然啦,自己也基于它的这个想法搞了一点简单点的类似效果,主要还是整个布局效果,具体每一块内容就不仿造了,而且我自己也加了一下开场动画,让它更好玩一

时间轴效果

效果图: 源代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>控制台 - Bootstrap后台管理系统模版Ace下载</title> <meta name="keywords" content="Bootstrap模版,Bootstrap模版下载,Boots

【特效】CSS3实现时间轴效果

参考:https://www.cnblogs.com/jr1993/p/4626815.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body{ background: #333; } h1{ text-align: center; co

网页效果-简单的时间轴实现

之前在网上看到,有很多人写的时间轴效果,于是自己也模仿着写了写.以下贴出自己写的解决方法(横向轴与纵向轴). 简单的时间轴效果容易实现,但如果需要看起来有模有样,就需要对页面进行设计布置了. 1.利用Js加简单的界面布置,实现时间轴鼠标点击轮换图片效果(纵向). 实现思路:利用多个div加背景色做纵向时间轴的样式,用CSS进行定位布局(时间轴一般都相对于浏览器窗口位置进行定位,避免浮动),再加上相应的文字描述.(:after,:before等一样能实现其效果),最后在用Js添加一些简单的鼠标事件