一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android時間軸效果的實(shí)現(xiàn)

 魔趣大師 2014-11-18
最近項(xiàng)目需要用到時間軸的效果,網(wǎng)上看了幾個例子,和想要實(shí)現(xiàn)的效果也不盡相同,下面將我的實(shí)現(xiàn)方法和思路說一下。首先看下效果圖:


數(shù)據(jù)是隨便填的,顯得有點(diǎn)亂,但是不影響效果。實(shí)現(xiàn)方面主要是用ListView來實(shí)現(xiàn),主要是根據(jù)ListView的item位置與上一條數(shù)據(jù)進(jìn)行比較,來控制時間的顯示隱藏效果。思路很簡單,下面看代碼實(shí)現(xiàn):
首先是頁面的整體布局,很簡單,就一個ListView:
res/layout/activity_main.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas./apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:orientation="vertical" >

  6.     <ListView
  7.         android:id="@+id/lv_list"
  8.         android:layout_width="match_parent"
  9.         android:layout_height="wrap_content"
  10.         android:cacheColorHint="@null"
  11.         android:divider="@null" >
  12.     </ListView>

  13. </LinearLayout>
復(fù)制代碼


ListView的item的布局分了三部分,一個需要顯示隱藏的標(biāo)題欄,包括一個小圓點(diǎn)和一個顯示時間的TextView,第二部分是展示的內(nèi)容,最后是時間軸的豎線。
res/layout/item_time_line.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas./apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="wrap_content" >

  5.     <RelativeLayout
  6.         android:id="@+id/rl_title"
  7.         android:layout_width="match_parent"
  8.         android:layout_height="wrap_content"
  9.         android:paddingTop="10dp" >

  10.         <ImageView
  11.             android:layout_width="wrap_content"
  12.             android:layout_height="wrap_content"
  13.             android:layout_centerVertical="true"
  14.             android:layout_marginLeft="8dp"
  15.             android:background="@drawable/img_line_point" />

  16.         <TextView
  17.             android:id="@+id/txt_date_time"
  18.             android:layout_width="wrap_content"
  19.             android:layout_height="wrap_content"
  20.             android:layout_centerVertical="true"
  21.             android:layout_marginLeft="15dp"
  22.             android:textColor="#FC6802" />
  23.     </RelativeLayout>

  24.     <TextView
  25.         android:id="@+id/txt_date_content"
  26.         android:layout_width="wrap_content"
  27.         android:layout_height="wrap_content"
  28.         android:layout_below="@id/rl_title"
  29.         android:layout_marginLeft="15dp"
  30.         android:paddingBottom="10dp"
  31.         android:textColor="#5296C5" />

  32.     <View
  33.         android:id="@+id/v_line"
  34.         android:layout_width="2dp"
  35.         android:layout_height="wrap_content"
  36.         android:layout_marginLeft="10dp"
  37.         android:background="#FC6802" />

  38. </RelativeLayout>
復(fù)制代碼

下面看主要的實(shí)現(xiàn)部分,是在listview的適配器中:
DateAdapter.java
  1. package com.xiaowu.timeline;

  2. import java.util.List;

  3. import android.content.Context;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.BaseAdapter;
  8. import android.widget.RelativeLayout;
  9. import android.widget.RelativeLayout.LayoutParams;
  10. import android.widget.TextView;

  11. public class DateAdapter extends BaseAdapter {
  12.         private Context context;
  13.         private List<DateText> list;

  14.         public DateAdapter(Context context, List<DateText> list) {
  15.                 this.context = context;
  16.                 this.list = list;
  17.         }

  18.         @Override
  19.         public int getCount() {
  20.                 if (list == null) {
  21.                         return 0;
  22.                 }
  23.                 return list.size();
  24.         }

  25.         @Override
  26.         public Object getItem(int position) {
  27.                 if (list == null) {
  28.                         return null;
  29.                 }
  30.                 return list.get(position);
  31.         }

  32.         @Override
  33.         public long getItemId(int position) {
  34.                 return position;
  35.         }

  36.         @Override
  37.         public View getView(int position, View convertView, ViewGroup parent) {
  38.                 ViewHolder holder = null;
  39.                 if (convertView == null) {
  40.                         holder = new ViewHolder();
  41.                         convertView = LayoutInflater.from(context).inflate(
  42.                                         R.layout.item_time_line, parent, false);
  43.                         holder.date = (TextView) convertView
  44.                                         .findViewById(R.id.txt_date_time);
  45.                         holder.content = (TextView) convertView
  46.                                         .findViewById(R.id.txt_date_content);
  47.                         holder.line = (View) convertView.findViewById(R.id.v_line);
  48.                         holder.title = (RelativeLayout) convertView
  49.                                         .findViewById(R.id.rl_title);
  50.                         convertView.setTag(holder);
  51.                 } else {
  52.                         holder = (ViewHolder) convertView.getTag();
  53.                 }
  54.                 //時間軸豎線的layout
  55.                 LayoutParams params = (LayoutParams) holder.line.getLayoutParams();
  56.                 //第一條數(shù)據(jù),肯定顯示時間標(biāo)題
  57.                 if (position == 0) {
  58.                         holder.title.setVisibility(View.VISIBLE);
  59.                         holder.date.setText(TimeFormat.format("yyyy.MM.dd",
  60.                                         list.get(position).getDate()));
  61.                         params.addRule(RelativeLayout.ALIGN_TOP, R.id.rl_title);
  62.                         params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.txt_date_content);
  63.                 } else { // 不是第一條數(shù)據(jù)
  64.                         // 本條數(shù)據(jù)和上一條數(shù)據(jù)的時間戳相同,時間標(biāo)題不顯示
  65.                         if (list.get(position).getDate()
  66.                                         .equals(list.get(position - 1).getDate())) {
  67.                                 holder.title.setVisibility(View.GONE);
  68.                                 params.addRule(RelativeLayout.ALIGN_TOP, R.id.txt_date_content);
  69.                                 params.addRule(RelativeLayout.ALIGN_BOTTOM,
  70.                                                 R.id.txt_date_content);
  71.                         } else {
  72.                                 //本條數(shù)據(jù)和上一條的數(shù)據(jù)的時間戳不同的時候,顯示數(shù)據(jù)
  73.                                 holder.title.setVisibility(View.VISIBLE);
  74.                                 holder.date.setText(TimeFormat.format("yyyy.MM.dd",
  75.                                                 list.get(position).getDate()));
  76.                                 params.addRule(RelativeLayout.ALIGN_TOP, R.id.rl_title);
  77.                                 params.addRule(RelativeLayout.ALIGN_BOTTOM,
  78.                                                 R.id.txt_date_content);
  79.                         }
  80.                 }
  81.                 holder.line.setLayoutParams(params);
  82.                 holder.content.setText(list.get(position).getText());
  83.                 return convertView;
  84.         }

  85.         public static class ViewHolder {
  86.                 RelativeLayout title;
  87.                 View line;
  88.                 TextView date;
  89.                 TextView content;
  90.         }
  91. }
復(fù)制代碼
其中DateText是實(shí)體類,包括標(biāo)題和內(nèi)容:

DateText.java
  1. package com.xiaowu.timeline;

  2. public class DateText {
  3.         private String date;
  4.         private String text;

  5.         public DateText() {

  6.         }

  7.         public DateText(String date, String text) {
  8.                 super();
  9.                 this.date = date;
  10.                 this.text = text;
  11.         }

  12.         public String getDate() {
  13.                 return date;
  14.         }

  15.         public void setDate(String date) {
  16.                 this.date = date;
  17.         }

  18.         public String getText() {
  19.                 return text;
  20.         }

  21.         public void setText(String text) {
  22.                 this.text = text;
  23.         }

  24. }
復(fù)制代碼
adapter里面用到了一個時間戳轉(zhuǎn)為指定格式的工具類:
TimeFormat.java
  1. package com.xiaowu.timeline;

  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;

  5. public class TimeFormat {
  6.         public static String format(String format, String time) {
  7.                 String result = "";
  8.                 SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
  9.                 try {
  10.                         Date date = df.parse(time);
  11.                         SimpleDateFormat df1 = new SimpleDateFormat(format);
  12.                         result = df1.format(date);
  13.                 } catch (ParseException e) {
  14.                         e.printStackTrace();
  15.                 }
  16.                 return result;
  17.         }
  18. }
復(fù)制代碼
場景類中還用到一個比較時間戳的工具類:

DateComparator.java
  1. package com.xiaowu.timeline;

  2. import java.util.Comparator;

  3. public class DateComparator implements Comparator<DateText> {

  4.         @Override
  5.         public int compare(DateText lhs, DateText rhs) {
  6.                 return rhs.getDate().compareTo(lhs.getDate());
  7.         }

  8. }
復(fù)制代碼
下面看下場景類:

MainActivity.java
  1. package com.xiaowu.timeline;

  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.List;

  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.widget.ListView;

  8. public class MainActivity extends Activity {
  9.         // 時間軸列表
  10.         private ListView lvList;
  11.         // 數(shù)據(jù)list
  12.         private List<DateText> list;
  13.         // 列表適配器
  14.         private DateAdapter adapter;

  15.         @Override
  16.         protected void onCreate(Bundle savedInstanceState) {
  17.                 super.onCreate(savedInstanceState);
  18.                 setContentView(R.layout.activity_main);
  19.                 // findviewbyid
  20.                 lvList = (ListView) findViewById(R.id.lv_list);
  21.                 list = new ArrayList<DateText>();
  22.                 // 添加測試數(shù)據(jù)
  23.                 addData();
  24.                 // 將數(shù)據(jù)按照時間排序
  25.                 DateComparator comparator = new DateComparator();
  26.                 Collections.sort(list, comparator);
  27.                 // listview綁定適配器
  28.                 adapter = new DateAdapter(this, list);
  29.                 lvList.setAdapter(adapter);
  30.         }

  31.         private void addData() {
  32.                 DateText date1 = new DateText("20140710", "撒大聲地");
  33.                 DateText date2 = new DateText("20140709", "撒薩達(dá)");
  34.                 DateText date3 = new DateText("20140726", "撒大ADS");
  35.                 DateText date4 = new DateText("20140710", "撒達(dá)到對薩達(dá)撒地");
  36.                 DateText date5 = new DateText("20140711", "撒大阿瑟的薩達(dá)地");
  37.                 DateText date6 = new DateText("20140713", "撒撒大大地");
  38.                 DateText date7 = new DateText("20140712", "撒大鼎折覆餗地");
  39.                 DateText date8 = new DateText("20140714", "撒大請問阿爾阿斯頓");
  40.                 DateText date9 = new DateText("20140709", "撒大親愛額問問喬恩地");
  41.                 DateText date10 = new DateText("20140705", "撒 請問請問地");
  42.                 DateText date11 = new DateText("20140729", "撒請問額外確認(rèn)聲地");
  43.                 DateText date12 = new DateText("20140725", "撒大按時打算");
  44.                 DateText date13 = new DateText("20140716", "撒大愛上大聲地");
  45.                 DateText date14 = new DateText("20140711", "撒其味無窮地");
  46.                 DateText date15 = new DateText("20140710", "撒大請問我期待地");
  47.                 DateText date16 = new DateText("20140711", "撒大聲薩達(dá)");
  48.                 DateText date17 = new DateText("20140712", "阿斯達(dá)");
  49.                 DateText date18 = new DateText("20140711", "撒大聲大聲道");
  50.                 DateText date19 = new DateText("20140715", "阿斯頓撒打算23 ");
  51.                 DateText date20 = new DateText("20140723", "范德薩發(fā)生");
  52.                 DateText date21 = new DateText("20140718", "阿薩德飛灑");
  53.                 DateText date22 = new DateText("20140706", "撒打算打算");
  54.                 DateText date23 = new DateText("20140714", "撒打算");
  55.                 DateText date24 = new DateText("20140726", "輕微的城市的方式");
  56.                 DateText date25 = new DateText("20140725", "阿斯達(dá)阿斯達(dá)現(xiàn)在");
  57.                 DateText date26 = new DateText("20140723", "代購費(fèi)多少自行車");
  58.                 DateText date27 = new DateText("20140721", "多撒阿薩德時打算");
  59.                 DateText date28 = new DateText("20140716", "愛上大聲地啊地");
  60.                 DateText date29 = new DateText("20140712", "阿斯蒂芬當(dāng)我?guī)煾?);
  61.                 DateText date30 = new DateText("20140710", "撒大聲大聲道");
  62.                 list.add(date1);
  63.                 list.add(date2);
  64.                 list.add(date3);
  65.                 list.add(date4);
  66.                 list.add(date5);
  67.                 list.add(date6);
  68.                 list.add(date7);
  69.                 list.add(date8);
  70.                 list.add(date9);
  71.                 list.add(date10);
  72.                 list.add(date11);
  73.                 list.add(date12);
  74.                 list.add(date13);
  75.                 list.add(date14);
  76.                 list.add(date15);
  77.                 list.add(date16);
  78.                 list.add(date17);
  79.                 list.add(date18);
  80.                 list.add(date19);
  81.                 list.add(date20);
  82.                 list.add(date21);
  83.                 list.add(date22);
  84.                 list.add(date23);
  85.                 list.add(date24);
  86.                 list.add(date25);
  87.                 list.add(date26);
  88.                 list.add(date27);
  89.                 list.add(date28);
  90.                 list.add(date29);
  91.                 list.add(date30);
  92.         }
  93. }
復(fù)制代碼
附上代碼: 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产成人午夜在线视频| 日韩精品毛片视频免费看| 亚洲国产香蕉视频在线观看| 亚洲中文字幕在线乱码av| 三级高清有码在线观看| 午夜福利网午夜福利网| 欧美日韩精品人妻二区三区| 大香蕉伊人精品在线观看| 观看日韩精品在线视频| 中文字幕日韩欧美理伦片| 色婷婷激情五月天丁香| 国产一区二区不卡在线播放| 国产高清三级视频在线观看| 日本精品理论在线观看| 日韩免费成人福利在线| 日本精品理论在线观看| 久久精品中文字幕人妻中文 | 日韩精品视频香蕉视频| 日本人妻中出在线观看| 一区二区日韩欧美精品| 黄片三级免费在线观看| 日韩蜜桃一区二区三区| 国产韩国日本精品视频| 国产日本欧美韩国在线| 日韩欧美综合中文字幕| 91后入中出内射在线| 国产中文字幕久久黄色片| 麻豆精品在线一区二区三区| 乱女午夜精品一区二区三区| 扒开腿狂躁女人爽出白浆av| 久久99爱爱视频视频| 一区二区福利在线视频| 久久国产亚洲精品赲碰热| 一本久道久久综合中文字幕| 国产又粗又爽又猛又黄的| 69老司机精品视频在线观看| 欧美一级特黄大片做受大屁股| 搡老妇女老熟女一区二区| 九九热这里只有精品哦| 国产一区二区在线免费| 亚洲内射人妻一区二区|