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);
	}

	@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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值