Android ListView 물류 획득 추적 기능 구현
최근 인터넷 에서 시간 축의 구조 효 과 를 보고 이 원리 에 따라 물류 추적 효 과 를 실현 하려 고 시도 했다.현 재 는 이미 실현 되 었 다.효 과 는 다음 과 같다.
이 효 과 는 완전히 ListView 로 이 루어 졌 다.어떻게 이 루어 졌 는 지 살 펴 보 자.
(1):레이아웃 ListView 및 항목 레이아웃 작성
우선 레이아웃 에 ListView 를 작성 해 야 합 니 다:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bobo.trace.MainActivity" >
<ListView
android:id="@+id/lv_trace"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@drawable/trace_divider"
android:dividerHeight="1dp"></ListView>
</RelativeLayout>
그리고 ListView 의 item 레이아웃 을 작성 합 니 다:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/rl_trace_item"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:id="@+id/v_up_line"
android:layout_width="2.5dp"
android:layout_height="10dp"
android:background="@color/mgrey"
android:layout_marginLeft="22dp"></View>
<ImageView
android:id="@+id/iv_state"
android:layout_width="16dp"
android:layout_height="16dp"
android:src="@drawable/circle"
android:layout_marginTop="10dp"
android:layout_marginLeft="15dp"/>
<TextView
android:id="@+id/tv_trace_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_toRightOf="@id/iv_state"
android:layout_marginLeft="20dp"
android:text="@string/test_trace_info"
android:textColor="@android:color/black"
android:textSize="13sp"/>
<LinearLayout
android:id="@+id/ll_trace_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_toRightOf="@id/iv_state"
android:layout_marginLeft="20dp"
android:orientation="horizontal"
android:layout_below="@id/tv_trace_info">
<TextView
android:id="@+id/tv_phone_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/phone_label"
android:textColor="@android:color/black"
android:textSize="13sp"/>
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/test_phone"
android:textColor="@android:color/black"
android:textSize="13sp"/>
</LinearLayout>
<TextView
android:id="@+id/tv_trace_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_toRightOf="@id/iv_state"
android:layout_marginLeft="20dp"
android:text="@string/test_trace_info"
android:textColor="@android:color/black"
android:textSize="13sp"
android:layout_below="@id/ll_trace_phone"/>
<View
android:id="@+id/v_down_line"
android:layout_width="2.5dp"
android:layout_height="45dp"
android:background="@color/mgrey"
android:layout_below="@id/iv_state"
android:layout_marginLeft="22dp"></View>
</RelativeLayout>
</RelativeLayout>
다음은 아 이 템 효과 살 펴 보 겠 습 니 다.위의 효과 도 에서 우 리 는 이 item 구조 에서 왼쪽 은'선-그림-선'의 구조 로 시간 축 을 표시 하고 오른쪽 은 해당 하 는 정 보 를 표시 하 며 물류 정보,연락 전화 와 시간 을 포함한다.우 리 는 시간 축 에서 첫 번 째 점 은 위의 그 선 이 필요 없다 는 것 을 알 고 있 습 니 다.마지막 점 은 아래 의 그 선 이 필요 하지 않 기 때문에 이 처 리 는 우리 가 Adapter 에서 해당 하 는 처 리 를 해 야 합 니 다.
(2):사용자 정의 어댑터
데 이 터 를 채 우 고 View 처 리 를 위해 서 는 사용자 정의 Adapter 가 필요 합 니 다.
물론 Adapter 를 만 들 기 전에 javabean 이 해당 하 는 정 보 를 저장 해 야 합 니 다.
Trace.java:
package com.bobo.beans;
public class Trace {
private boolean isHead;
private String info;
private String phone;
private String time;
public Trace(boolean isHead, String info, String phone, String time) {
super();
this.isHead = isHead;
this.info = info;
this.phone = phone;
this.time = time;
}
public boolean isHead() {
return isHead;
}
public void setHead(boolean isHead) {
this.isHead = isHead;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
다음은 Adapter 류 를 즐겁게 작성 할 수 있 습 니 다.
package com.bobo.adapters;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bobo.beans.Trace;
import com.bobo.trace.R;
public class TraceAdapter extends BaseAdapter {
private ArrayList<Trace> tradeLists = null;
private LayoutInflater inflater;
private Context context;
public TraceAdapter(ArrayList<Trace> tradeLists,Context context){
this.tradeLists = tradeLists;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return tradeLists == null ? 0 : tradeLists.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return tradeLists.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if(convertView == null){
convertView = inflater.inflate(R.layout.trace_item, null);
holder = new Holder();
holder.v_up_line = (View)convertView.findViewById(R.id.v_up_line);
holder.iv_state = (ImageView)convertView.findViewById(R.id.iv_state);
holder.tv_trace_info = (TextView)convertView.findViewById(R.id.tv_trace_info);
holder.ll_trace_phone = (LinearLayout)convertView.findViewById(R.id.ll_trace_phone);
holder.tv_phone = (TextView)convertView.findViewById(R.id.tv_phone);
holder.tv_trace_time = (TextView)convertView.findViewById(R.id.tv_trace_time);
holder.v_down_line = (View)convertView.findViewById(R.id.v_down_line);
convertView.setTag(holder);
}else{
holder = (Holder)convertView.getTag();
}
if(tradeLists.get(position).isHead()){
holder.v_up_line.setVisibility(View.GONE);
//holder.iv_state = (ImageView)convertView.findViewById(R.id.iv_state);
holder.tv_trace_info.setText(tradeLists.get(position).getInfo());
holder.tv_phone.setText(tradeLists.get(position).getPhone());
holder.tv_trace_time.setText(tradeLists.get(position).getTime());
holder.v_down_line.setVisibility(View.VISIBLE);
}else if(tradeLists.size() == (position+1)){
holder.tv_trace_info.setText(tradeLists.get(position).getInfo());
holder.ll_trace_phone.setVisibility(View.GONE);
holder.tv_trace_time.setText(tradeLists.get(position).getTime());
holder.v_down_line.setVisibility(View.GONE);
}else{
holder.tv_trace_info.setText(tradeLists.get(position).getInfo());
holder.ll_trace_phone.setVisibility(View.GONE);
holder.tv_trace_time.setText(tradeLists.get(position).getTime());
holder.v_down_line.setVisibility(View.VISIBLE);
}
return convertView;
}
class Holder{
View v_up_line;
ImageView iv_state;
TextView tv_trace_info;
LinearLayout ll_trace_phone;
TextView tv_phone;
TextView tv_trace_time;
View v_down_line;
}
}
이렇게 해서 우리 의 Adapter 는 이미 적합 하 게 완성 되 었 습 니 다.다음은 Activity 에서 실험 해 보 겠 습 니 다.(3):Activity 실험:
package com.bobo.trace;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.ListView;
import com.bobo.adapters.TraceAdapter;
import com.bobo.beans.Trace;
public class MainActivity extends Activity {
private ListView lv_trace;
private ArrayList<Trace> tradeLists = new ArrayList<Trace>();
private TraceAdapter ta;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = MainActivity.this;
initView();
}
private void initView(){
lv_trace = (ListView)findViewById(R.id.lv_trace);
initData();
ta = new TraceAdapter(tradeLists, context);
lv_trace.setAdapter(ta);
}
private void initData(){
tradeLists.add(new Trace(true, " ", "15253157943", "2016-03-16 13:30:43"));
tradeLists.add(new Trace(false, " ", "", "2016-03-16 18:30:43"));
tradeLists.add(new Trace(false, " ", "", "2016-03-17 13:30:43"));
tradeLists.add(new Trace(false, " ", "", "2016-03-18 13:30:43"));
tradeLists.add(new Trace(false, " ", "", "2016-03-19 13:30:43"));
}
}
이렇게 실행 하면 ListView 의 selector 폭 이 전체 화면 을 차지 하 는 것 을 발견 할 수 있 습 니 다.그러면 ListView 의 selector 를 조정 하기 위해 inset 을 만들어 야 합 니 다.trace_divider.xml:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="50dp"
android:drawable="@color/mgrey">
</inset>
이렇게 해서 우리 의 물류 추적 인터페이스 가 완성 되 었 다 고 해도 매우 간단 하 다.ListView 물류 획득 추적 기능 실현 에 대해 서 는 여기까지 소개 해 드 리 겠 습 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ScrollView에 포함된 ListView는 하나의 해결 방법만 표시합니다.일반적으로 우리는 ScrollView에 ListView를 끼워 넣지 않지만, 면접관이 굳이 끼워 넣지 않아도 된다. ScrollView에 ListView를 추가하면 listview 컨트롤이 완전하지 않습니다. 보통 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.