最近开发一个Android小应用。就是利用ViewPager实现多个页面来回导航切换,每个页面是一个ListView显示多个条目。本来以为很简单的事情,左右手势实现Viewpager的切换,上下手势实现ListView的功能。谁知道在手机上运行时,发现一个焦点冲突现象。左右导航没有问题,但是在一个页面里,经常出现ListView上下手势失效。总是无法实现List的上下滚动,即使很明显的上下手势也是触发了ViewPager的页面切换。
查了很多方法,发现重写Viewpager的手势检测功能可以解决这个问题。将源代码贴上。
————————————————————————-
public class MyViewPager extends ViewPager {
private GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(new XYScrollDetector());
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return super.onInterceptTouchEvent(event)&&mGestureDetector.onTouchEvent(event);
}
class XYScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(distanceY!=0&&distanceX!=0){
}
if(Math.abs(distanceY) >= Math.abs(distanceX)) {
return false;
}
return true;
}
}
}
分享到:
相关推荐
在Android开发中,有时我们需要在一个页面中展示大量的数据,这时我们可能会选择使用ViewPager结合ListView来构建一个可滑动且分页的视图。标题“ViewPager嵌套ListView实现上拉和下拉刷新”揭示了一个关键的技术点...
本示例主要探讨如何在ViewPager中嵌套ListView,同时实现下拉刷新和上拉加载更多的功能,并解决两者之间可能存在的冲突问题。 首先,我们要理解ViewPager和ListView各自的工作原理。ViewPager主要用于展示多个页面...
总之,解决Android编程开发中ScrollView中ViewPager无法正常滑动的问题,关键在于理解事件分发机制,并通过自定义ScrollView来判断和处理滑动事件。通过创建一个自定义的ScrollView子类,并结合GestureDetector,...
在Android应用开发中,我们经常会遇到复杂布局的嵌套,比如`SlidingMenu`、`ViewPager`和`ListView`的组合。这样的设计可以为用户提供类似网易新闻客户端的体验,左侧是滑动菜单,中间是`ViewPager`用于切换不同的...
在Android开发中,ViewPager是一个非常常用的组件,它用于展示多个页面并允许用户通过左右滑动进行切换。然而,在某些特定场景下,我们可能需要禁止ViewPager的滑动功能,例如当ViewPager内部包含可滚动的视图(如...
总的来说,解决ListView item的外层Margin失效的问题通常需要理解ListView的工作原理,并结合自定义Divider、Adapter或ViewGroup等方法进行调整。在开发中,选择适合项目需求的解决方案并进行适当的优化,是提高用户...
在Android开发中,ListView是常用的数据展示控件,与之配套使用的适配器Adapter负责将数据转化为可显示的视图。适配器的核心方法之一就是`notifyDataSetChanged()`,它的作用是通知ListView数据集发生了变化,需要...
在Android开发中,"RecyclerView+ViewPager"是一种常见的组合,用于构建高效的、可滑动的界面。这个组合在很多场景下非常实用,例如实现类似京东分类的功能,用户可以通过左右滑动来浏览不同的分类,每个分类下又有...
在开发过程中遇到的滑动冲突,例如ViewPager和横向RecyclerView,滑动ViewPager发现RecyclerView滑动不了,或者ViewPager和ListView,能滑动ListView确发现水平方向的滑动失效。滑动冲突的解决方法都是基于事件分发...
总结,ScrollView嵌套是Android开发中解决复杂滚动需求的一种方法,但需要谨慎使用以防止性能问题。通过理解嵌套滚动的工作原理和使用NestedScrollView,以及适当的性能优化,我们可以创建出用户体验良好的应用界面...