Android 快遞跟蹤布局

先看效果

5EEF4F5B7CEB5CCBF6F9C877D0FEC4B9.jpg

首頁Activity


public class TraceActivity extends AppCompatActivity {

    private ListView lvTrace;
    private List<Trace> traceList = new ArrayList<>(10);
    private TraceListAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_trace);
        findView();
        initData();
    }

    private void findView() {
        lvTrace = (ListView) findViewById(R.id.lvTrace);
    }

    private void initData() {
        // 模擬一些假的數據
        traceList.add(new Trace("2016年11月18日 上午12:04:01", "在湖北武漢洪山區光谷公司長江社區便民服務站進行簽收掃描,快件已被 已簽收 簽收"));
        traceList.add(new Trace("2016年11月18日 上午11:57:25", "在湖北武漢洪山區光谷公司長江社區便民服務站進行派件掃描;派送業務員:老王;聯系電話:17786550311"));
        traceList.add(new Trace("2016年11月17日 下午4:43:29", "在湖北武漢洪山區光谷公司進行快件掃描,將發往:湖北武漢洪山區光谷公司長江社區便民服務站"));
        traceList.add(new Trace("2016年11月17日 上午9:11:21", "從湖北武漢分撥中心發出,本次轉運目的地:湖北武漢洪山區光谷公司"));
        traceList.add(new Trace("2016年11月17日 上午1:53:14", "在湖南長沙分撥中心進行裝車掃描,即將發往:湖北武漢分撥中心"));
        traceList.add(new Trace("2016年11月17日 上午1:50:18", "在分撥中心湖南長沙分撥中心進行稱重掃描"));
        traceList.add(new Trace("2016年11月16日 上午11:27:58", "在湖南隆回縣公司進行到件掃描"));
        adapter = new TraceListAdapter(this, traceList);
        lvTrace.setAdapter(adapter);
    }
}

然后適配器

public class TraceListAdapter extends BaseAdapter {
    private Context context;
    private List<Trace> traceList = new ArrayList<>(1);
    private static final int TYPE_TOP = 0x0000;
    private static final int TYPE_NORMAL= 0x0001;

    public TraceListAdapter(Context context, List<Trace> traceList) {
        this.context = context;
        this.traceList = traceList;
    }

    @Override
    public int getCount() {
        return traceList.size();
    }

    @Override
    public Trace getItem(int position) {
        return traceList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        final Trace trace = getItem(position);
        if (convertView != null) {
            holder = (ViewHolder) convertView.getTag();
        } else {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.item_trace, parent, false);
            holder.tvAcceptTime = (TextView) convertView.findViewById(R.id.tvAcceptTime);
            holder.tvAcceptStation = (TextView) convertView.findViewById(R.id.tvAcceptStation);
            holder.tvTopLine = (TextView) convertView.findViewById(R.id.tvTopLine);
            holder.tvDot = (TextView) convertView.findViewById(R.id.tvDot);
            holder.tv_new = (TextView) convertView.findViewById(R.id.tv_new);
            convertView.setTag(holder);
        }

        if (getItemViewType(position) == TYPE_TOP) {
            // 第一行頭的豎線不顯示
            holder.tvTopLine.setVisibility(View.INVISIBLE);
            holder.tv_new.setVisibility(View.VISIBLE);
            // 字體顏色加深
            holder.tvAcceptTime.setTextColor(context.getResources().getColor(R.color.red));
            holder.tvAcceptStation.setTextColor(context.getResources().getColor(R.color.red));
            holder.tvDot.setBackgroundResource(R.drawable.timelline_dot_secord);
        } else if (getItemViewType(position) == TYPE_NORMAL) {
            holder.tvTopLine.setVisibility(View.VISIBLE);
            holder.tv_new.setVisibility(View.INVISIBLE);
            holder.tvAcceptTime.setTextColor(0xff999999);
            holder.tvAcceptStation.setTextColor(0xff999999);
            holder.tvDot.setBackgroundResource(R.drawable.timelline_dot_first);
        }

        holder.tvAcceptTime.setText(trace.getAcceptTime());
        holder.tvAcceptStation.setText(trace.getAcceptStation());
        return convertView;
    }

    @Override
    public int getItemViewType(int id) {
        if (id == 0) {
            return TYPE_TOP;
        }
        return TYPE_NORMAL;
    }

    static class ViewHolder {
        public TextView tvAcceptTime, tvAcceptStation;
        public TextView tvTopLine, tvDot,tv_new;
    }
}

實體類

public class Trace {
    /** 時間 */
    private String acceptTime;
    /** 描述 */
    private String acceptStation;

    public Trace() {
    }

    public Trace(String acceptTime, String acceptStation) {
        this.acceptTime = acceptTime;
        this.acceptStation = acceptStation;
    }

    public String getAcceptTime() {
        return acceptTime;
    }

    public void setAcceptTime(String acceptTime) {
        this.acceptTime = acceptTime;
    }

    public String getAcceptStation() {
        return acceptStation;
    }

    public void setAcceptStation(String acceptStation) {
        this.acceptStation = acceptStation;
    }
}

activity布局和item布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@android:color/white"
    tools:context="cc.duduhuo.timelinedemo.TraceActivity">

    <ListView
        android:id="@+id/lvTrace"
        android:layout_width="match_parent"
        android:divider="@null"
        android:clickable="false"
        android:listSelector="@android:color/transparent"
        android:dividerHeight="0dp"
        android:layout_height="wrap_content" />
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="horizontal">

    <RelativeLayout
        android:id="@+id/rlTimeline"
        android:layout_width="75dp"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/tvTopLine"
            android:layout_width="0.5dp"
            android:layout_height="12dp"
            android:layout_centerHorizontal="true"
            android:background="#999" />

        <TextView
            android:id="@+id/tvDot"
            android:layout_width="5dp"
            android:layout_height="5dp"
            android:layout_margin="2dp"
            android:layout_below="@id/tvTopLine"
            android:layout_centerHorizontal="true"
            android:background="@drawable/timelline_dot_normal" />

        <TextView
            android:layout_width="0.5dp"
            android:layout_height="match_parent"
            android:layout_below="@id/tvDot"
            android:layout_centerHorizontal="true"
            android:background="#999" />
        <TextView
            android:id="@+id/tv_new"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="最新"
            android:textColor="#ffffff"
            android:background="#ff0000"
            android:textSize="12sp"
            android:layout_marginLeft="3dp"
            android:paddingLeft="3dp"
            android:paddingRight="3dp"
           android:layout_toRightOf="@id/tvDot"
            android:layout_below="@id/tvTopLine"
            />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rlCenter"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="6dp"
        android:paddingRight="10dp"
        android:paddingLeft="10dp"
        android:paddingTop="6dp">

        <TextView
            android:id="@+id/tvAcceptTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2014/06/24 20:55:28"
            android:textColor="#999"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/tvAcceptStation"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/tvAcceptTime"
            android:layout_marginTop="5dp"
            android:text="在湖南隆回縣公司進行到件掃描"
            android:textColor="#999"
            android:textSize="12sp" />
    </RelativeLayout>
</LinearLayout>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容