王学岗事件冲突的处理
我们写一个工程
先看布局文件
<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的直接或者间接子类
王学岗事件冲突的处理相关推荐
- iOS UITapGestureRecognizer手势和UIButton 以及UITabelView点击事件冲突
一:在同一个view上加载,UITapGestureRecognizer手势,UIButton 行为,UITabelView点击事件冲突: 二:解决方式: 在UITapGesttureRecogniz ...
- ViewPager的事件冲突的解决
当我昨天做viewpager内图片的滑动时,发现图片没有滑动,反而是viewpager滑动了,后来在网上查了资料,解决的事件冲突的问题. @Override public boolean di ...
- 踩坑 - click事件与blur事件冲突问题 input文件上传同名文件问题
前言 上周写需求遇到了一点小坑涉及到一些小细节,今天赶上没啥事总结一下分享出来. click事件与blur事件冲突问题 click事件与blur事件 blur事件: 表单事件,元素失去焦点时候触发,不 ...
- Android动画及滑动事件冲突解决(转载)
原文链接:http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路,也是重 ...
- Android Listview中Button按钮点击事件冲突解决办法
今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...
- ScrollView嵌套ViewPager,ViewPage动态设置高度,嵌套事件冲突——滑动冲突解决方法
1.创建自定义ViewPager public class ViewPagerForScrollView extends ViewPager {int myh=0 ;boolean ifme =fal ...
- scrollview嵌套listview 滑动事件冲突的解决方法
scrollview嵌套listview 滑动事件冲突的解决方法 参考文章: (1)scrollview嵌套listview 滑动事件冲突的解决方法 (2)https://www.cnblogs.co ...
- jquery href属性和click事件冲突
a标签的定义如下: <a href="javascript:void(0);">test</a> jquery中的click事件: $("a&qu ...
- android onClickListener onLongClickListener事件冲突
<!-- 最右边删除按钮 --><RelativeLayoutandroid:id="@+id/rly_cancel_app"android:layout_wid ...
最新文章
- iOS-SDPhotoBrowser
- 指定目录的所有 *.gif 文件都重命名为 *.jpg
- python中用turtle绘制时钟_python使用turtle库绘制时钟
- 7. 基于策略的强化学习——蒙特卡洛策略梯度REINFORCE算法
- Angular源代码里字母Theta的含义
- Markdown语法、相关警告配置设置——持续更新
- 使用OGR创建弧形图形
- java浮点数转二进制_浮点数转换成二进制
- 如何屏蔽LOGD\LOGI等打印输出
- i2c通信的详细讲解_STM32Cube15 | 使用硬件I2C读写温湿度传感器(SHT30)
- 计算机网络-路由器广域网配置
- adb驱动和adb工具官方下载链接
- Flink:flink问题总结
- 汽车软件行业工程师详细介绍?(中)
- 【xlsx-chart】Vue项目中导出Excel表格并带上图表
- UML2.51边译边学-接口
- 使用Python计算前10000个质数表
- star法则简历Android,优秀简历坚持STAR原则
- Gamma Correction sRGB texture
- PowerDesigner菜单翻译