ViewGroup类似Launcher效果 拖动带点击事件的控件无法划屏的解决

网上抄的代码不太完美,总有些小问题,之前是无法更新GridView,现在又发现如果点中可点击的控件(按钮,图片等),再拖动,无法实现划屏效果.这两个问题折腾了我大半天,研究了会事件传递机制后,解决.
之所以出现上面的问题,是因为在onInterceptTouchEvent方法中,自动传递事件给相应的控件,我们重写该方法,自己判断该不该划屏即可.默认情况下,在非可点击控件上划,只会触发onTouchEvent,不会触发onInterceptTouchEvent,所以onTouchEvent里也需要判断划屏的方法.


// 按下时x座标
	private float startX = 0;
	// 最终x座标
	private float endx = 0;

	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		int what = ev.getAction();
		System.out.println("what" + what);
		switch (what) {
		case MotionEvent.ACTION_DOWN:
			startX = ev.getX();
			break;
		}
		endx = ev.getX();

		if (endx - startX > 150)// 距离超过150
		{
			// 返回true,会传给onTouchEvent方法
			snapToScreen(mCurScreen - 1);
			startX = endx;

		} else if (endx - startX < -150) {
			snapToScreen(mCurScreen + 1);
			startX = endx;
		}
		// 默认传递,其实就是传给相应的控件
		return super.onInterceptTouchEvent(ev);
	}

© 2012, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记