久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

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


數(shù)據(jù)是隨便填的,顯得有點亂,,但是不影響效果,。實現(xiàn)方面主要是用ListView來實現(xiàn),主要是根據(jù)ListView的item位置與上一條數(shù)據(jù)進(jìn)行比較,,來控制時間的顯示隱藏效果,。思路很簡單,下面看代碼實現(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)題欄,,包括一個小圓點和一個顯示時間的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ù)制代碼

下面看主要的實現(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是實體類,包括標(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ā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多