时光轴三之ExpandableListView版时光轴效果
上两篇讲到了用listView和recyclerView来实现时光轴,这一篇我们用ExpandableListView来实现时光轴,废话不多说,直接来代码。
还是先activity_main.xml
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#f7f7f7">
android:id="@+id/top_line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/head_line_bg"/>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/top_line">
android:id="@+id/group_tiao"
android:layout_width="1dp"
android:layout_height="fill_parent"
android:layout_marginLeft="55dp"
android:background="@color/time_line_bg"/>
android:id="@+id/expandlist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/courses_title"
android:cacheColorHint="#00000000"
android:divider="@null"/>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
android:id="@+id/imageView1"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="45dp"
android:layout_marginRight="5dp"
android:background="@drawable/img_line_point"
android:contentDescription="@string/app_name"/>
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dip"
android:layout_marginTop="20dp"
android:gravity="center_vertical"
android:orientation="vertical">
android:id="@+id/one_status_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textColor="#000000"
android:textSize="18sp"/>
很简单的布局也就是一个组标题。
接着是child_status_item.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center_vertical">
android:padding="8dp"
android:id="@+id/img"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="50dp"
android:scaleType="fitXY"/>
android:id="@+id/content_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:layout_marginLeft="70dp"
android:layout_marginTop="6dp"
android:textColor="#999999"/>
很简单就是左边图片右边文字。
然后来看代码,先来数据适配器
packagecom.zy.adapter;
importjava.util.List;
importandroid.content.Context;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseExpandableListAdapter;
importandroid.widget.ImageView;
importandroid.widget.TextView;
importcom.zy.R;
importcom.zy.entity.ChildStatusEntity;
importcom.zy.entity.GroupStatusEntity;
importcom.zy.entity.TimeFormat;
publicclassStatusExpandAdapterextendsBaseExpandableListAdapter{
privateLayoutInflaterinflater=null;
privateListgroupList;
/
构造方法
@paramcontext
@paramoneList
/
publicStatusExpandAdapter(Contextcontext,
Listgroup_list){
this.groupList=group_list;
inflater=(LayoutInflater)context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/
返回一级Item总数
/
@Override
publicintgetGroupCount(){
returngroupList==null?0:groupList.size();
}
/
返回二级Item总数
/
@Override
publicintgetChildrenCount(intgroupPosition){
returngroupList==null?0
:(groupList.get(groupPosition)==null?0:(groupList
.get(groupPosition).getChildList()==null?0
:groupList.get(groupPosition).getChildList().size()));
}
/
获取一级Item内容
/
@Override
publicObjectgetGroup(intgroupPosition){
//TODOAuto-generatedmethodstub
returngroupList.get(groupPosition);
}
/
获取二级Item内容
/
@Override
publicObjectgetChild(intgroupPosition,intchildPosition){
returngroupList.get(groupPosition).getChildList().get(childPosition);
}
@Override
publiclonggetGroupId(intgroupPosition){
//TODOAuto-generatedmethodstub
returngroupPosition;
}
@Override
publiclonggetChildId(intgroupPosition,intchildPosition){
returnchildPosition;
}
@Override
publicbooleanhasStableIds(){
returnfalse;
}
@Override
publicViewgetGroupView(intgroupPosition,booleanisExpanded,
ViewconvertView,ViewGroupparent){
GroupViewHolderholder=newGroupViewHolder();
if(convertView==null){
convertView=inflater.inflate(R.layout.group_status_item,null);
}
holder.groupName=(TextView)convertView
.findViewById(R.id.one_status_name);
holder.groupName.setText(TimeFormat.format("yyyy.MM.dd",groupList.get(groupPosition).getGroupName()));
returnconvertView;
}
@Override
publicViewgetChildView(intgroupPosition,intchildPosition,
booleanisLastChild,ViewconvertView,ViewGroupparent){
ChildViewHolderviewHolder=null;
ChildStatusEntityentity=(ChildStatusEntity)getChild(groupPosition,
childPosition);
if(convertView!=null){
viewHolder=(ChildViewHolder)convertView.getTag();
}else{
viewHolder=newChildViewHolder();
convertView=inflater.inflate(R.layout.child_status_item,null);
viewHolder.content_text=(TextView)convertView
.findViewById(R.id.content_text);
viewHolder.img=(ImageView)convertView.findViewById(R.id.img);
}
viewHolder.content_text.setText(entity.getContentText());
viewHolder.img.setImageResource(entity.getImgSrc());
convertView.setTag(viewHolder);
returnconvertView;
}
@Override
publicbooleanisChildSelectable(intgroupPosition,intchildPosition){
returntrue;
}
privateclassGroupViewHolder{
TextViewgroupName;
}
privateclassChildViewHolder{
publicTextViewcontent_text;
publicImageViewimg;
}
}
这就是简单的ExpandableListView的适配器的写法,不明白的自己去查api咯。
然后里面封装了2个实体对象,当然也就是group和child的类对象:
packagecom.zy.entity;
importjava.util.List;
/
一级Item实体类
/
publicclassGroupStatusEntity{
privateStringgroupName;
/二级Item数据列表/
privateListchildList;
publicStringgetGroupName(){
returngroupName;
}
publicvoidsetGroupName(StringgroupName){
this.groupName=groupName;
}
publicListgetChildList(){
returnchildList;
}
publicvoidsetChildList(ListchildList){
this.childList=childList;
}
}
packagecom.zy.entity;
/
二级Item实体类
@authorzihao
/
publicclassChildStatusEntity{
/预计完成时间/
privateStringcontentText;
/是否已完成/
privatebooleanisfinished;
privateintimgSrc;
publicintgetImgSrc(){
returnimgSrc;
}
publicvoidsetImgSrc(intimgSrc){
this.imgSrc=imgSrc;
}
publicStringgetContentText(){
returncontentText;
}
publicvoidsetContentText(StringcontentText){
this.contentText=contentText;
}
publicbooleanisIsfinished(){
returnisfinished;
}
publicvoidsetIsfinished(booleanisfinished){
this.isfinished=isfinished;
}
}
哈哈接下来是mainActivity咯;
packagecom.zy;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.List;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.ExpandableListView;
importandroid.widget.ExpandableListView.OnGroupClickListener;
importandroid.widget.ExpandableListView.OnGroupExpandListener;
importcom.zy.R;
importcom.zy.adapter.StatusExpandAdapter;
importcom.zy.entity.ChildStatusEntity;
importcom.zy.entity.DateComparator;
importcom.zy.entity.GroupStatusEntity;
publicclassMainActivityextendsActivity{
privateExpandableListViewexpandlistView;
privateStatusExpandAdapterstatusAdapter;
privateContextcontext;
privateintcount=0;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
expandlistView=(ExpandableListView)findViewById(R.id.expandlist);
initExpandListView();
}
/
初始化可拓展列表
/
privatevoidinitExpandListView(){
statusAdapter=newStatusExpandAdapter(context,getListData());
expandlistView.setAdapwww.shanxiwang.netter(statusAdapter);
expandlistView.setGroupIndicator(null);//去掉默认带的箭头
//expandlistView.setSelection(0);//设置默认选中项
//遍历所有group
intgroupCount=expandlistView.getCount();
expandlistView.expandGroup(0);
for(inti=0;i if(i<=1){
expandlistView.expandGroup(i);
}
}
expandlistView.setOnGroupClickListener(newOnGroupClickListener(){
@Override
publicbooleanonGroupClick(ExpandableListViewparent,Viewv,
intgroupPosition,longid){
returnfalse;
}
});
expandlistView.setOnGroupExpandListener(newOnGroupExpandListener(){
@Override
publicvoidonGroupExpand(intgroupPosition){
count++;
for(inti=0,count=expandlistView
.getExpandableListAdapter().getGroupCount();i if(groupPosition!=i&&count>2){//关闭其他分组
expandlistView.collapseGroup(i);
count=1;
}
}
}
});
}
privateListgetListData(){
ListgroupList;
String[]strArray=newString[]{"20140710","20081201","20150809"};
String[][]childTimeArray=newString[][]{
{
"敬往事一杯酒,再爱也不回头",
"择一城终老,遇一人白首。",
"有时候邀女生出来玩她拒绝你的原因只有两个,一是她懒得洗头,二是你的邀请不值得她洗头。女生非要约人出来也有两个原因,一是她洗了头不出来玩不甘心,二是突然很想吃某家的东西。",
"我见过千万人像你的发像你的眼却都不是你的脸。"},
{
"你说长相不重要,是因为你长了一张就算刚睡醒也敢自拍的脸。你说成绩不重要,是因为你随随便便又不小心考了次年级前五。你说恋爱不重要,是因为你身边备胎多的可以摆四五桌麻将了。你说家境不重要,是因为你有一个看你皱一下眉就给你买新款的父母。你说健康不重要,是因为你不会半夜因为疼痛而翻来覆去咳得撕心裂肺。你说不重要不过是因为你已经拥有了,你说不重要不过是因为你从来不知道别人的努力和挣扎。",
"你永远不知道在你发了个“嗯”或者“哦”还能继续回复你的人,是有多在乎你!",
"最想说的话在眼睛里,草稿箱里,还有梦里"},
{"那些花了好久才想明白的事,总是会被偶尔的情绪失控全部推翻。",
"折磨人的不是离别,而是感动的回忆,让人很容易站在原地还以为回得去","敬往事一杯酒,再爱也不回头!",
"可以一杯滚水烫死我,也可以一杯冰水冷死我,但不能一杯温水耗着我,我要的是黑白分明直接利落"}};
groupList=newArrayList();
for(inti=0;i GroupStatusEntitygroupStatusEntity=newGroupStatusEntity();
groupStatusEntity.setGroupName(strArray[i]);
ListchildList=newArrayList();
for(intj=0;j ChildStatusEntitychildStatusEntity=newChildStatusEntity();
childStatusEntity.setContentText(childTimeArray[i][j]);
if(j%3==0){
childStatusEntity.setImgSrc(R.drawable.one);
}
if(j%3==1){
childStatusEntity.setImgSrc(R.drawable.two);
}
if(j%3==2){
childStatusEntity.setImgSrc(R.drawable.three);
}
childStatusEntity.setIsfinished(true);
childList.add(childStatusEntity);
}
groupStatusEntity.setChildList(childList);
groupList.add(groupStatusEntity);
}
//将数据按照时间排序
DateComparatorcomparator=newDateComparator();
Collections.sort(groupList,comparator);
returngroupList;
}
}
哈哈写完了,看下效果图:
手机差截图不用愁了,用asm.jar来显示生成图片传上来清晰多了。
运行asm.jar后是这样的效果:
asm.jar的下载地址http://download.csdn.net/download/lxq_xsyu/6666965,我可是下了好几个不能用的,说什么清单文件为空,醉了,步骤呢
1、将其copy到platform-tools目录下
2、运行java-jarasm.jar即可启动
按右键就出现如此菜单选项:
图片就可以直接保存了(saveimage),zoom呢是设置屏幕的大小。
|
|