Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是Android道路上的小菜鸟,这篇讲的是时间轴的实现,说实话,其实就是listview的偷梁换柱,本来我会在写listview这个系列的时候写的,但是最近自己写的一个项目《Only》上用到了,很多群友说也想看看怎么实现的,独乐乐不如众乐乐,所以就提前先来分享,说说listview,这可是一个名角,在android上很受欢迎,也很实用,当然本篇不会详细讲解listview,只是说怎么用listview实现时间轴的效果,无奈listview我也正在学习当中,而且新出的RecyclerView更是如艺术般的华丽,都要去学习,只能感叹”书山有路勤为径,学海无涯苦作舟”,我们,我们就不瞎BB了,直接进入正题吧还是老话,无图无真相实现1.新建项目TimeLineDemo2.下载GSON我们做本地存储需要,当然,你也可以从其他渠道下载初始版本2008年5月22日最新版本(稳定版本)2.2.4/2013年5月13日;2个月前编程语言Java操作平台各种平台许可协议ApacheLicense2.03.AdapterListView需要一个adapter,我们就定义一个TimeLineAdapterpackagecom.lgl.timelinedemo;importjava.util.List;importjava.util.Map;importandroid.content.Context;importandroid.graphics.Color;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.TextView;publicclassTimelineAdapterextendsBaseAdapter{privateContextcontext;privateListMapString,Objectlist;privateLayoutInflaterinflater;publicTimelineAdapter(Contextcontext,ListMapString,Objectlist){super();this.context=context;this.list=list;}@OverridepublicintgetCount(){returnlist.size();}@OverridepublicObjectgetItem(intposition){returnposition;}@OverridepubliclonggetItemId(intposition){returnposition;}@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){ViewHolderviewHolder;if(convertView==null){inflater=LayoutInflater.from(context);convertView=inflater.inflate(R.layout.item,null);viewHolder=newViewHolder();viewHolder.day=(TextView)convertView.findViewById(R.id.day);viewHolder.time=(TextView)convertView.findViewById(R.id.time);viewHolder.content=(TextView)convertView.findViewById(R.id.content);convertView.setTag(viewHolder);}else{viewHolder=(ViewHolder)convertView.getTag();}Stringday=list.get(position).get(day).toString();Stringtime=list.get(position).get(time).toString();Stringcontent=list.get(position).get(content).toString();if(day!=){viewHolder.day.setBackgroundColor(Color.WHITE);}if(time==null){time=#;}if(content==null){content=#;}viewHolder.day.setText(day);viewHolder.day.setBackgroundResource(R.drawable.timeline_year);viewHolder.time.setText(time);viewHolder.day.setText(day);viewHolder.time.setText(time);viewHolder.content.setText(content);returnconvertView;}staticclassViewHolder{publicTextViewday;publicTextViewtime;publicTextViewcontent;}}4.item.xmladapter需要一个item,也就是时间轴偷梁换柱的根本?xmlversion=1.0encoding=utf-8?RelativeLayoutxmlns:android=:layout_width=match_parentandroid:layout_height=match_parentandroid:background=#ffffffandroid:orientation=verticalandroid:paddingRight=20dpViewandroid:id=@+id/view_1android:layout_width=2dpandroid:layout_height=15dpandroid:layout_marginLeft=30dpandroid:background=#E9F01D/TextViewandroid:id=@+id/show_timeandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_below=@+id/view_1android:layout_marginLeft=30dpandroid:text=android:textSize=12dp/ImageViewandroid:id=@+id/imageandroid:layout_width=15dpandroid:layout_height=15dpandroid:layout_below=@+id/view_1android:layout_marginLeft=24dpandroid:src=@drawable/timeline_red/Viewandroid:id=@+id/view_2android:layout_width=2dpandroid:layout_height=45dpandroid:layout_below=@+id/imageandroid:layout_marginLeft=30dpandroid:background=#E9F01D/RelativeLayoutandroid:id=@+id/relativeandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:layout_below=@+id/imageandroid:layout_marginLeft=5dpandroid:layout_marginTop=-20dpandroid:layout_toRightOf=@+id/imageandroid:background=@drawable/timeline_content_blueandroid:padding=5dpTextViewandroid:id=@+id/timeandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:paddingLeft=5dpandroid:text=03:22android:textSize=14sp/TextViewandroid:id=@+id/contentandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_marginLeft=3dpandroid:layout_toRightOf=@id/timeandroid:text=内容,写点啥好尼?android:textSize=14sp//RelativeLayoutTextViewandroid:textColor=#fffandroid:layout_marginLeft=15dpandroid:id=@+id/dayandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_alignBottom=@+id/view_2android:layout_marginTop=-2dpandroid:gravity=centerandroid:text=01月13日android:textSize=8sp/Viewandroid:id=@+id/view_5android:layout_width=2dpandroid:layout_height=10dpandroid:layout_alignLeft=@+id/view_2android:layout_below=@+id/dayandroid:background=#E9F01D//RelativeLayout5.activity_main.xml然后我们就可以来写主布局,为了方便,我就直接添加一个EditText和一个Button做添加处理了?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=http:/:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalEditTextandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:id=@+id/et/Buttonandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=addandroid:id=@+id/add/ListViewandroid:id=@+id/listviewandroid:layout_width=fill_paren