我们写一个工程
先看布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><ScrollView
        android:id="@+id/sv_scrollView"android:layout_width="fill_parent"android:layout_height="fill_parent" ><LinearLayout
            android:id="@+id/ll_linearLayout"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextView android:id="@+id/tv_one"android:layout_width="fill_parent"android:layout_height="50dp"android:background="#123456"/><GridView
                android:layout_width="fill_parent"android:layout_height="400dp"android:id="@+id/gv_gridView"/><TextView android:id="@+id/tv_two"android:layout_width="fill_parent"android:layout_height="80dp"android:background="#234567"/><TextView android:id="@+id/tv_three"android:layout_width="fill_parent"android:layout_height="100dp"android:background="#345678"/></LinearLayout></ScrollView></LinearLayout>

ScrollView里面嵌套了一个GridView;
现在大家看一下MainActivity代码

package com.example.anjianshijian_chumoshijiandechuli;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.GridView;
import android.widget.ScrollView;
import android.widget.SimpleAdapter;
import android.widget.TextView;public class MainActivity extends Activity implements OnTouchListener {private GridView gv_gridView;private List<Map<String, String>> data;private ScrollView sl_scroll;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sl_scroll = (ScrollView) findViewById(R.id.sv_scrollView);gv_gridView = (GridView) findViewById(R.id.gv_gridView);gv_gridView.setNumColumns(3);data = new ArrayList<Map<String, String>>();for (int i = 0; i < 100; i++) {Map<String, String> map = new HashMap<String, String>();map.put("one", "张欣爱我" + i + "生");data.add(map);}SimpleAdapter adapter = new SimpleAdapter(this, data,R.layout.gridview, new String[] { "one" },new int[] { R.id.tv_adapter });gv_gridView.setAdapter(adapter);gv_gridView.setOnTouchListener(this);}@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_UP:Log.i("张欣", "up");break;case MotionEvent.ACTION_MOVE:Log.i("张欣", "move");break;case MotionEvent.ACTION_DOWN:Log.i("张欣", "down");break;default:break;}return super.onTouchEvent(event);}
}

大家看下效果图

我们知道触摸时间是gv_gridView的,但是我们移动的时候无论如何也无法移动他,100个数据也没办法显示
大家看一下日志,无论你是return false或者是return true都会打印这个结果

只有 down 和move ,没有up;而且随着你的拖拽滑动,move也不再打印输出
要想找原因我们要从sl_scroll上面找;
我们查看下ScrollView里面的秘书方法

 public boolean onInterceptTouchEvent(MotionEvent ev){}


我们在移动,拖拽的时候就已经满足了scrollView的action == MotionEvent.ACTION_MOVE和mIsBeingDragged这两个条件,所以事件就被scrollview给拦截消耗了(return true);所以gridview无法得到这个事件;
要想使gridview获得触摸事件,我们要调用scrollview父类的父类ViewGroup的下面的方法

public void requestDisallowInterceptTouchEvent(boolean disallowIntercept)

该方法是设置是否拦截事件
true :事件不拦截 会传递给子控件
false:相反
所以我们要更改下代码

    @Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_UP:Log.i("张欣", "up");break;case MotionEvent.ACTION_MOVE:Log.i("张欣", "move");**在这里添加方法**     sl_scroll.requestDisallowInterceptTouchEvent(true);break;case MotionEvent.ACTION_DOWN:Log.i("张欣", "down");break;default:break;}return super.onTouchEvent(event);}

我们在运行工程看看日志输出情况

同理,遇到以下事件冲突也可以采用这个方法

     ScrollView 嵌套一个GridViewViewPager 嵌套一个ViewPagerHorizontalScrollView嵌套GridViewViewPager 嵌套一个ListView   GridView

与ScrollView相同 ViewPager, Horizonta,ViewPager也是ViewGroup的直接或者间接子类

王学岗事件冲突的处理相关推荐

  1. iOS UITapGestureRecognizer手势和UIButton 以及UITabelView点击事件冲突

    一:在同一个view上加载,UITapGestureRecognizer手势,UIButton 行为,UITabelView点击事件冲突: 二:解决方式: 在UITapGesttureRecogniz ...

  2. ViewPager的事件冲突的解决

    当我昨天做viewpager内图片的滑动时,发现图片没有滑动,反而是viewpager滑动了,后来在网上查了资料,解决的事件冲突的问题. @Override     public boolean di ...

  3. 踩坑 - click事件与blur事件冲突问题 input文件上传同名文件问题

    前言 上周写需求遇到了一点小坑涉及到一些小细节,今天赶上没啥事总结一下分享出来. click事件与blur事件冲突问题 click事件与blur事件 blur事件: 表单事件,元素失去焦点时候触发,不 ...

  4. Android动画及滑动事件冲突解决(转载)

    原文链接:http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路,也是重 ...

  5. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  6. ScrollView嵌套ViewPager,ViewPage动态设置高度,嵌套事件冲突——滑动冲突解决方法

    1.创建自定义ViewPager public class ViewPagerForScrollView extends ViewPager {int myh=0 ;boolean ifme =fal ...

  7. scrollview嵌套listview 滑动事件冲突的解决方法

    scrollview嵌套listview 滑动事件冲突的解决方法 参考文章: (1)scrollview嵌套listview 滑动事件冲突的解决方法 (2)https://www.cnblogs.co ...

  8. jquery href属性和click事件冲突

    a标签的定义如下: <a href="javascript:void(0);">test</a> jquery中的click事件: $("a&qu ...

  9. android onClickListener onLongClickListener事件冲突

    <!-- 最右边删除按钮 --><RelativeLayoutandroid:id="@+id/rly_cancel_app"android:layout_wid ...

最新文章

  1. iOS-SDPhotoBrowser
  2. 指定目录的所有 *.gif 文件都重命名为 *.jpg
  3. python中用turtle绘制时钟_python使用turtle库绘制时钟
  4. 7. 基于策略的强化学习——蒙特卡洛策略梯度REINFORCE算法
  5. Angular源代码里字母Theta的含义
  6. Markdown语法、相关警告配置设置——持续更新
  7. 使用OGR创建弧形图形
  8. java浮点数转二进制_浮点数转换成二进制
  9. 如何屏蔽LOGD\LOGI等打印输出
  10. i2c通信的详细讲解_STM32Cube15 | 使用硬件I2C读写温湿度传感器(SHT30)
  11. 计算机网络-路由器广域网配置
  12. adb驱动和adb工具官方下载链接
  13. Flink:flink问题总结
  14. 汽车软件行业工程师详细介绍?(中)
  15. 【xlsx-chart】Vue项目中导出Excel表格并带上图表
  16. UML2.51边译边学-接口
  17. 使用Python计算前10000个质数表
  18. star法则简历Android,优秀简历坚持STAR原则
  19. Gamma Correction sRGB texture
  20. PowerDesigner菜单翻译

热门文章

  1. 苹果cmsV10 短视多功能主题5.1版本
  2. svm 用来人脸识别_基于SVM的人脸识别
  3. 微信公众号开发---nginx反向代理
  4. vo在自动驾驶中的应用(一)
  5. CyberVein恭祝大家新年快乐,牛年大吉!
  6. Mac QuickTime Player X播放器打开电影视频后自动播放的方法
  7. debian的几个lib源_Debian源
  8. 各种排序算法比较(java)
  9. 多线程 - Windows下线程池的使用
  10. 如何将Word快速转为PPT?