Listview仿Iphone特效(转)
主程序代码:
?
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);}@Overridepublic 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

