`
hemowolf
  • 浏览: 154117 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ListView嵌入ViewPager等横向滚动控件冲突的终究解决方案

阅读更多

     ListView嵌入ViewPager等横向滚动控件,会导致ViewPager左右拨动和ListView手势冲突。按经验(Gallery中的子视图处理Click事件)只要比对滑动的X坐标大于Y坐标,就交由ViewPager处理,应该是个简单的问题。实际search到的比较火方案的思路是用SimpleOnGestureListener的onScroll回调中判断X、Y坐标拨动绝对值是否拦截,不过这个到处转载的方案是有很多问题的(比如拨动不灵敏、上下拨有问题),那些转载的是脑子被炉踢了吗?

   最后在stackoverflow看到一个解决方法,思路除了考虑X、Y坐标还考虑到了down、move事件的配合,比较靠谱结果试试效果不错。下面是核心代码,完整实现请参考附件(这种实现可以同样可以处理ListView嵌入ViewFlow、ViewFlipper、HorizontalScrollView等需要横向滚动的控件)

	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		switch (ev.getAction()) {
			case MotionEvent.ACTION_DOWN :
				mDX = mDY = 0f;
				mLX = ev.getX();
				mLY = ev.getY();

				break;

			case MotionEvent.ACTION_MOVE :
				final float X = ev.getX();
				final float Y = ev.getY();
				mDX += Math.abs(X - mLX);
				mDY += Math.abs(Y - mLY);
				mLX = X;
				mLY = Y;

				if (mIntercept && mLastAct == MotionEvent.ACTION_MOVE) {
					return false;
				}

				if (mDX > mDY) {

					mIntercept = true;
					mLastAct = MotionEvent.ACTION_MOVE;
					return false;
				}

		}
		mLastAct = ev.getAction();
		mIntercept = false;
		return super.onInterceptTouchEvent(ev);
	}

 

分享到:
评论

相关推荐

    listView添加ViewPager实现同时滑动

    在Android开发中,ListView和ViewPager是两种非常常用的控件,分别用于展示长列表和实现页面间的滑动切换。当我们需要在一个列表项中嵌入多个页面视图时,将ListView与ViewPager结合使用就能达到同时滑动的效果。这...

    ViewPager+Fragment左右滑动+上下滑动不冲突

    当ViewPager中的Fragment包含可滚动的内容(如ScrollView或ListView)时,可能会出现上下滑动与ViewPager的左右滑动冲突。为了解决这个问题,我们需要自定义一个ViewPager,覆盖其`onInterceptTouchEvent...

    好用的侧滑菜单

    在某些场景下,如展示横向滚动的图片轮播或分类标签,这样的控件会非常有用。将它与侧滑菜单结合,可以创建出更复杂的交互效果,比如在侧滑菜单中包含一个可滚动的水平列表,用户可以在其中浏览更多信息。 总的来说...

    Fragment示例,简单易懂,可做框架

    在这个示例中,Fragment与ListView的结合可能展示了如何在Fragment中创建一个可滚动的列表视图,这对于展示大量数据如联系人、新闻或者菜单项等非常实用。 ViewPager则是Android中的滑动页面容器,常用于实现水平...

    安卓开发-一个Demo搞定30个控件.zip

    26. HorizontalScrollView(水平滚动视图):同ScrollView,但支持水平方向的滚动。 27. ArrayAdapter(适配器):连接数据源和UI控件,如ListView或Spinner,用于数据绑定。 28. CursorAdapter(游标适配器):专门...

    Android七种layout布局实例(可直接运行)

    常用于创建照片库、菜单或棋盘游戏等,允许用户横向和纵向滚动查看内容。 7. **ListView**: ListView是一个可以滚动的视图,通常用于显示长列表数据。它可以动态加载数据,节省内存,并提供高效的滚动性能。...

    Android应用源码之ViewFlow,一个滑动效果库.zip

    ViewFlow的设计使其具有良好的可扩展性,可以方便地与其他UI组件结合使用,例如在每个卡片视图中嵌入其他复杂的布局或控件。 7. **布局管理**: 除了基本的水平滑动,ViewFlow还可以通过继承和自定义实现更复杂的...

    Android入门

    - AdapterView:提供滚动显示数据的控件如ListView。 22. **Fragment详解** - Fragment是可重复使用的用户界面片段。 - 可以嵌入Activity中。 - 提供了更好的复用性和灵活性。 23. **选项卡(TabHost)** - ...

    安卓学习路线

    ### 安卓学习路线 #### 一、基础知识与开发环境搭建 **1.... - **Eclipse + ADT + SDK:** Eclipse 是早期 Android ...通过系统地学习这些内容,不仅能够帮助开发者构建高质量的应用程序,还能提高解决实际问题的能力。

Global site tag (gtag.js) - Google Analytics