主程序代码:
private SimpleAdapter listItemAdapter; // ListView的适配器
private ArrayList<HashMap<String, Object>> listItem; // ListView的数据源,这里是一个HashMap的列表
private IphoneListView myList; // ListView控件
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listItem = new ArrayList<HashMap<String, Object>>();
listItemAdapter = new SimpleAdapter(this, listItem, R.layout.list_item,
new String[]{"title", "text"},
new int[]{R.id.ItemTitle, R.id.ItemText});
myList = new IphoneListView(this);
myList.setAdapter(listItemAdapter);
setContentView(myList);
addItem("1窗口","1窗口");
addItem("2窗口","2窗口");
addItem("3窗口","3窗口");
addItem("4窗口","4窗口");
addItem("5窗口","5窗口");
addItem("6窗口","6窗口");
addItem("7窗口","7窗口");
}
private void addItem(String title , String str){
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("title", title);
map.put("text", str);
listItem.add(map);
listItemAdapter.notifyDataSetChanged();
}
IphoneListView类代码:
public class IphoneListView extends ListView implements Runnable {
private float mLastDownY = 0f;
private int mDistance = 0;
private int mStep = 10;
private boolean mPositive = false;
public IphoneListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public IphoneListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public IphoneListView(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mLastDownY == 0f && mDistance == 0) {
mLastDownY = event.getY();
return true;
}
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (mDistance != 0) {
mStep = 1;
mPositive = mDistance >= 0;
this.post(this);
return true;
}
mLastDownY = 0f;
mDistance = 0;
break;
case MotionEvent.ACTION_MOVE:
if (mLastDownY != 0f) {
mDistance = (int) (mLastDownY - event.getY());
if ((mDistance < 0 && getFirstVisiblePosition() == 0 && getChildAt(
0).getTop() == 0)
|| (mDistance > 0 && getLastVisiblePosition() == getCount() - 1)) {
mDistance /= 2;
scrollTo(0, mDistance);
return true;
}
}
mDistance = 0;
break;
}
return super.onTouchEvent(event);
}
public void run() {
mDistance += mDistance > 0 ? -mStep : mStep;
scrollTo(0, mDistance);
if ((mPositive && mDistance <= 0) || (!mPositive && mDistance >= 0)) {
scrollTo(0, 0);
mDistance = 0;
mLastDownY = 0f;
return;
}
mStep += 1;
this.postDelayed(this, 10);
}
}
IphoneListView类代码来源:http://hemowolf.iteye.com/blog/1181065