標籤:android 布局 時間軸
最近在網上看到時間軸的布局效果,嘗試按照這個原理,實現物流跟蹤的效果,目前已經實現了,效果如。
介面布局主要是通過listView來實現的,listView item 左右布局。左邊是豎線,狀態圖片,豎線。右邊 是 物流資訊和 時間。
開始左邊線的高度很不好適配,最後請教網友,用了layout_weight屬性。
豎線本來使用的是ImageView顯示,結果線的高度變小,寬度也隨之變小,導致螢幕根本看不清左邊布局中狀態圖片上的線。
最後採用了View來繪製豎線,效果還挺理想的額。
具體的布局如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginStart="10dip" android:orientation="vertical" android:gravity="center" > <View android:id="@+id/View_logistic_tracking_line1" android:layout_width="2dip" android:layout_height="20dip" android:background="#DCDCDC"/> <ImageView android:id="@+id/mgView_logistic_tracking_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/logistics_state1" android:contentDescription="@string/app_name" /> <View android:id="@+id/View_logistic_tracking_line2" android:layout_width="2dip" android:layout_height="0dip" android:layout_weight="1" android:background="#DCDCDC"/> </LinearLayout> <LinearLayout android:id="@+id/ll_logistic_tracking_timeline" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:layout_marginRight="10dip" android:orientation="vertical" > <TextView android:id="@+id/tv_logistic_tracking_address" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dip" android:textSize="20sp" android:textColor="#000000" /> <TextView android:id="@+id/tv_logistic_tracking_time" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:layout_marginBottom="20dip" android:textSize="18sp" android:textColor="#000000" /> </LinearLayout> </LinearLayout>
自訂的適配器:
public class TimeLineAdapter extends BaseAdapter {private Context mcontext=null; private List<TimeLine> mlist=null;private LayoutInflater minflater;public TimeLineAdapter ( Context context, List<TimeLine> list ){this.mcontext = context;minflater = LayoutInflater.from(context);mlist = list;}@Overridepublic int getCount() {// TODO Auto-generated method stubif( null!=mlist){return mlist.size();}return 0;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubif( null!=mlist){return mlist.get(position); }return null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@SuppressLint("InflateParams")@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stub ViewHold viewHold;if(convertView == null){viewHold = new ViewHold();convertView = minflater.inflate(R.layout.timeline_item, null);viewHold.imageView1 = (ImageView)convertView.findViewById(R.id.mgView_logistic_tracking_status);viewHold.textView1 = (TextView)convertView.findViewById(R.id.tv_logistic_tracking_address);viewHold.textView2 = (TextView)convertView.findViewById(R.id.tv_logistic_tracking_time);viewHold.line1 = (View)convertView.findViewById(R.id.View_logistic_tracking_line1);convertView.setTag(viewHold);}else {viewHold = (ViewHold)convertView.getTag( );}if(position==0){viewHold.line1.setVisibility(View.INVISIBLE);viewHold.imageView1.setImageResource(R.drawable.logistics_state);}else{viewHold.line1.setVisibility(View.VISIBLE);viewHold.imageView1.setImageResource(R.drawable.logistics_state1);}viewHold.textView1.setText( mlist.get(position).getMaddress());viewHold.textView2.setText( mlist.get(position).getMtime());return convertView;} private final static class ViewHold{ ImageView imageView1; View line1; TextView textView1; TextView textView2; }}
TimeLine定義:
public class TimeLine {private String maddress;private String mtime;public TimeLine( String address ,String time){this.maddress = address;this.mtime = time;}public String getMaddress() {return maddress;}public void setMaddress(String maddress) {this.maddress = maddress;}public String getMtime() {return mtime;}public void setMtime(String mtime) {this.mtime = mtime;}}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android物流跟蹤