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); }
相关推荐
在Android开发中,ListView和ViewPager是两种非常常用的控件,分别用于展示长列表和实现页面间的滑动切换。当我们需要在一个列表项中嵌入多个页面视图时,将ListView与ViewPager结合使用就能达到同时滑动的效果。这...
当ViewPager中的Fragment包含可滚动的内容(如ScrollView或ListView)时,可能会出现上下滑动与ViewPager的左右滑动冲突。为了解决这个问题,我们需要自定义一个ViewPager,覆盖其`onInterceptTouchEvent...
在某些场景下,如展示横向滚动的图片轮播或分类标签,这样的控件会非常有用。将它与侧滑菜单结合,可以创建出更复杂的交互效果,比如在侧滑菜单中包含一个可滚动的水平列表,用户可以在其中浏览更多信息。 总的来说...
在这个示例中,Fragment与ListView的结合可能展示了如何在Fragment中创建一个可滚动的列表视图,这对于展示大量数据如联系人、新闻或者菜单项等非常实用。 ViewPager则是Android中的滑动页面容器,常用于实现水平...
26. HorizontalScrollView(水平滚动视图):同ScrollView,但支持水平方向的滚动。 27. ArrayAdapter(适配器):连接数据源和UI控件,如ListView或Spinner,用于数据绑定。 28. CursorAdapter(游标适配器):专门...
常用于创建照片库、菜单或棋盘游戏等,允许用户横向和纵向滚动查看内容。 7. **ListView**: ListView是一个可以滚动的视图,通常用于显示长列表数据。它可以动态加载数据,节省内存,并提供高效的滚动性能。...
ViewFlow的设计使其具有良好的可扩展性,可以方便地与其他UI组件结合使用,例如在每个卡片视图中嵌入其他复杂的布局或控件。 7. **布局管理**: 除了基本的水平滑动,ViewFlow还可以通过继承和自定义实现更复杂的...
- AdapterView:提供滚动显示数据的控件如ListView。 22. **Fragment详解** - Fragment是可重复使用的用户界面片段。 - 可以嵌入Activity中。 - 提供了更好的复用性和灵活性。 23. **选项卡(TabHost)** - ...
### 安卓学习路线 #### 一、基础知识与开发环境搭建 **1.... - **Eclipse + ADT + SDK:** Eclipse 是早期 Android ...通过系统地学习这些内容,不仅能够帮助开发者构建高质量的应用程序,还能提高解决实际问题的能力。