溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android應用中怎么實現一個跟蹤布局效果

發布時間:2020-12-04 17:17:38 來源:億速云 閱讀:240 作者:Leah 欄目:移動開發

這篇文章給大家介紹Android應用中怎么實現一個跟蹤布局效果,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

首頁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>
<&#63;xml version="1.0" encoding="utf-8"&#63;>
<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>

關于Android應用中怎么實現一個跟蹤布局效果就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女