上下スライドのListview
Listviewのスライド実装プロセスは、スライド状態(開始、スライド、停止)のリスニングを提供する.
カスタムListview:
xml:
アクティビティ:
注意:
1.Listviewで表示されている部分だけを押してスライドできるようにしたい場合.Listviewの設定:
<1>.Listviewを書き換え、スライド開始時にHeaderViewを動的に追加します.
<2>.Listviewをレイアウトで包み、headviewを追加してレイアウト全体をスライドします.
3.実はheadviewに対してActivityで動的に追加してもいいです.
カスタムListview:
public class RefreshListView extends ListView implements OnScrollListener {
private Context context;
// Y
private int startY;
//
public interface OnRefreshState {
//
void onStart(int starty);
//
void onMove(int space);
//
void onStop();
}
private OnRefreshState onRefreshState;
public OnRefreshState getOnRefreshState() {
return onRefreshState;
}
public void setOnRefreshState(OnRefreshState onRefreshState) {
this.onRefreshState = onRefreshState;
}
public RefreshListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.context = context;
initView();
}
public RefreshListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initView();
}
public RefreshListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
initView();
}
public void initView() {
this.setOnScrollListener(this);
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
/**
* ;
*
* @param topPadding
*/
private void topPadding(int topPadding) {
this.setPadding(getPaddingLeft(), topPadding, getPaddingRight(),
getPaddingBottom());
invalidate();
}
/**
*
*
* @param ev
*/
protected void onMove(MotionEvent ev) {
int tempY = (int) ev.getY();
int space = tempY - startY;
topPadding(space);
onRefreshState.onMove(space);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
switch (ev.getAction()) {
//
case MotionEvent.ACTION_DOWN:
startY = (int) ev.getY();
onRefreshState.onStart(startY);
break;
//
case MotionEvent.ACTION_MOVE:
onMove(ev);
break;
//
case MotionEvent.ACTION_UP:
topPadding(0);
onRefreshState.onStop();
break;
}
return super.onTouchEvent(ev);
}
}
xml:
<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" >
<com.freshlistview.RefreshListView
android:id="@+id/lv_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.freshlistview.RefreshListView>
</RelativeLayout>
アクティビティ:
public class MainActivity extends Activity {
private MainActivity mContext;
private List<String> list = new ArrayList<String>();
private RefreshListView freshLV;
private LocalAdapter adapter;
protected void showToast(String s) {
Toast.makeText(mContext, s, Toast.LENGTH_SHORT).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
freshLV = (RefreshListView) findViewById(R.id.lv_refresh);
for (int i = 0; i < 10; i++) {
list.add("");
}
adapter = new LocalAdapter();
freshLV.setAdapter(adapter);
freshLV.setOnRefreshState(new OnRefreshState() {
@Override
public void onStop() {
// TODO Auto-generated method stub
showToast("stop");
}
@Override
public void onStart(int starty) {
// TODO Auto-generated method stub
showToast("start:" + starty);
}
@Override
public void onMove(int space) {
// TODO Auto-generated method stub
showToast("space:" + space);
}
});
}
private class LocalAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.item, null);
}
return convertView;
}
}
}
注意:
1.Listviewで表示されている部分だけを押してスライドできるようにしたい場合.Listviewの設定:
<com.freshlistview.RefreshListView
android:id="@+id/lv_refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</com.freshlistview.RefreshListView>
2.ドロップダウン・リフレッシュの実装は、次のとおりです.<1>.Listviewを書き換え、スライド開始時にHeaderViewを動的に追加します.
<2>.Listviewをレイアウトで包み、headviewを追加してレイアウト全体をスライドします.
3.実はheadviewに対してActivityで動的に追加してもいいです.
headerView = LayoutInflater.from(mcontext).inflate(R.layout.view_refresh_headview, null);
mlvList = (RefreshListView).findViewById(R.id.lvBankCardList);
mlvdList.addHeaderView(headerView);