读书人

ScrollView中ViewPager无法正常滑动有

发布时间: 2013-08-24 13:17:55 作者: rapoo

ScrollView中ViewPager无法正常滑动问题

本文主要介绍如何解决ViewPager在ScrollView中滑动经常失效、无法正常滑动问题

解决方法只需要在接近水平滚动时ScrollView不处理事件而交由其子View(即这里的ViewPager)处理即可,重写ScrollView的onInterceptTouchEvent函数,如下:

[java] view plain copy
  1. package?cc.newnews.view;????
  2. import?android.content.Context;??import?android.util.AttributeSet;??
  3. import?android.view.GestureDetector;??import?android.view.GestureDetector.SimpleOnGestureListener;??
  4. import?android.view.MotionEvent;??import?android.widget.ScrollView;??
  5. ??public?class?VerticalScrollView?extends?ScrollView?{??
  6. ??????private?GestureDetector?mGestureDetector;??
  7. ??????public?VerticalScrollView(Context?context,?AttributeSet?attrs)?{??
  8. ????????super(context,?attrs);??????????mGestureDetector?=?new?GestureDetector(context,?new?YScrollDetector());??
  9. ????}????
  10. ????@Override??????public?boolean?onInterceptTouchEvent(MotionEvent?ev)?{??
  11. ????????return?super.onInterceptTouchEvent(ev)??????????????????&&?mGestureDetector.onTouchEvent(ev);??
  12. ????}????
  13. ????class?YScrollDetector?extends?SimpleOnGestureListener?{????
  14. ????????@Override??????????public?boolean?onScroll(MotionEvent?e1,?MotionEvent?e2,??
  15. ????????????????float?distanceX,?float?distanceY)?{??????????????/**?
  16. ?????????????*?如果我们滚动更接近水平方向,返回false,让子视图来处理它??????????????*/??
  17. ????????????return?(Math.abs(distanceY)?>?Math.abs(distanceX));??????????}??
  18. ????}??}??

?

再将xml中的ScrollView改为<xxx.xxx.xxx.VerticalScrollView>即包名.重写的ScrollView的类名)即可。

本方法同样适用于ScrollView中ListView等其他View无法滚动。

读书人网 >编程

热点推荐