配色: 字号:
时光轴三之 ExpandableListView版时光轴效果
2016-09-10 | 阅:  转:  |  分享 
  
时光轴三之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呢是设置屏幕的大小。

献花(0)
+1
(本文系网络学习天...首藏)