当前位置: 首页 > 编程笔记 >

Android ScrollView嵌套横向滑动控件时冲突问题

谯翔
2023-03-14
本文向大家介绍Android ScrollView嵌套横向滑动控件时冲突问题,包括了Android ScrollView嵌套横向滑动控件时冲突问题的使用技巧和注意事项,需要的朋友参考一下

前言:今天在开发的时候遇到这样的问题,最外层是ScrollView,里面嵌套了一个横向滑动的日历控件,在滑动日历的时候很卡顿。看到这种问题,自然而然的就会想到scrollview和其他可滑动控件的冲突问题。

解决思路

用户的左右滑动操作被最外层的scrollView控件处理掉了,所以只要让scrollview对左右滑动事件不监听,让其子控件处理左右滑动事件 。重写scrollview的onInterceptTouchEvent方法,当上下滑动时不处理即可。

代码如下

public void setOnScollChangedListener(OnScollChangedListener onScollChangedListener) {
  this.onScollChangedListener = onScollChangedListener;
}

@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
  super.onScrollChanged(x, y, oldx, oldy);
  if (onScollChangedListener != null) {
    onScollChangedListener.onScrollChanged(this, x, y, oldx, oldy);
  }
}

public interface OnScollChangedListener {

  void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);

}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
  switch (ev.getAction()) {
  case MotionEvent.ACTION_DOWN:
    xDistance = yDistance = 0f;
    xLast = ev.getX();
    yLast = ev.getY();
    break;
  case MotionEvent.ACTION_MOVE:
    final float curX = ev.getX();
    final float curY = ev.getY();

    xDistance += Math.abs(curX - xLast);
    yDistance += Math.abs(curY - yLast);
    xLast = curX;
    yLast = curY;

    /**
     * X轴滑动距离大于Y轴滑动距离,也就是用户横向滑动时,返回false,ScrollView不处理这次事件,
     * 让子控件中的TouchEvent去处理,所以横向滑动的事件交由子控件处理, ScrollView只处理纵向滑动事件
     */
    if (xDistance > yDistance) {
      return false;
    }
  }

  return super.onInterceptTouchEvent(ev);
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Android解决viewpager嵌套滑动冲突并保留侧滑菜单功能,包括了Android解决viewpager嵌套滑动冲突并保留侧滑菜单功能的使用技巧和注意事项,需要的朋友参考一下 重写子pagerview的dispatchTouchEvent方法,在返回前添加一句getParent().requestDisallowInterceptTouchEvent(true)中断掉事件的传递

  • 本文向大家介绍解决ViewPager和SlidingPaneLayout的滑动事件冲突问题,包括了解决ViewPager和SlidingPaneLayout的滑动事件冲突问题的使用技巧和注意事项,需要的朋友参考一下 问题描述: ViewPager和SlidingPaneLayout的滑动事件冲突。 问题分析: 在手指左右滑动时,SlidingPaneLayout会屏蔽ViewPager的滑动事件。

  • 有人在处理ViewPager2片段GoogleMap吗? 我遇到了一个非常有趣的问题,在我的viewpager中有两个选项卡,每个选项卡都呈现片段。 其中一个片段产生了谷歌地图。 当我尝试在地图上移动时,我得到了viewpager2尝试左右滑动的效果,这真的很烦人,所以我所做的解决方法并不太好。 我通过构造函数将视图寻呼机暴露给其中一个片段,并向顶部视图寻呼机活动发出回调。 在那里,我用逻辑执行了

  • 在纵向滚动的UITableView的每一个section里面嵌套横向滚动的UITableView。其中横向滑动的UITableView,是重新建了一个类来重写UITableView,将其旋转90°。适用环境:Xcode 4.5, iOS 5.0 以上。 [Code4App.com]

  • 本文向大家介绍jquery UI Datepicker时间控件冲突问题解决,包括了jquery UI Datepicker时间控件冲突问题解决的使用技巧和注意事项,需要的朋友参考一下 公司里的项目由于发展较快,很多东西都没有好好梳理一下,以至于有很多的潜在的问题。 最近就遇到了一个比较坑的问题。datepicker  有两个插件库中的datepicker插件比较有名。一个是jQuery-UI,一个

  • 本文向大家介绍Android侧滑菜单和轮播图之滑动冲突问题,包括了Android侧滑菜单和轮播图之滑动冲突问题的使用技巧和注意事项,需要的朋友参考一下 接手一个项目,有一个问题需要修改:轮播图不能手动滑动,手动滑动轮播图只会触发侧滑菜单。 猜测:viewpager控件(轮播图)的触摸事件被SlidingMenu控件(侧滑菜单,非第三方项目,乃是上个开发人员自定义的)拦截了。 基于这个猜测,我自定义