问题:一个Gridiew的拖拽应用 在模拟器上 运行的没有一点问题
当我部署到平板电脑上 长按事件 不起作用了
研究:
Java代码
  1. publicbooleanonInterceptTouchEvent(MotionEventev){
  2. //这时候你得到的x,y是在DragLayer下面得到的这时候容器就是DragLayer了
  3. intx=(int)ev.getX();
  4. inty=(int)ev.getY();
  5. switch(ev.getAction()){
  6. caseMotionEvent.ACTION_DOWN:
  7. System.out.println("onInterceptTouchEventdown");
  8. returnfalse;
  9. caseMotionEvent.ACTION_MOVE:
  10. System.out.println("onInterceptTouchEventmove");
  11. returnture;
  12. caseMotionEvent.ACTION_UP:
  13. System.out.println("onInterceptTouchEventup");
  14. System.out.println(111);
  15. returnfalse;
  16. }
  17. returnsuper.onInterceptTouchEvent(ev);
  18. }


我的Gridview的父类的onInterceptTouchEvent 是这样写的

在模拟器是没有问题的
我就想down up 我都向下传 但是move我会截获 进行一些操作

但是 在平板上 就出现问题了
onItemLongClick事件 根本就没有执行

后来 调试的时候 我发现
在平板电脑上长按时 down总是伴随着move

也就是说 onItemLongClick没有执行的原因就是这个move事件 里面我是return true的

解决:

1、建一个静态变量
//是否可以移动
Java代码
  1. publicstaticbooleanisMove=false;

2、修改onInterceptTouchEvent
Java代码
  1. publicbooleanonInterceptTouchEvent(MotionEventev){
  2. //这时候你得到的x,y是在DragLayer下面得到的这时候容器就是DragLayer了
  3. intx=(int)ev.getX();
  4. inty=(int)ev.getY();
  5. switch(ev.getAction()){
  6. caseMotionEvent.ACTION_DOWN:
  7. System.out.println("onInterceptTouchEventdown");
  8. returnfalse;
  9. caseMotionEvent.ACTION_MOVE:
  10. System.out.println("onInterceptTouchEventmove");
  11. break;
  12. caseMotionEvent.ACTION_UP:
  13. System.out.println("onInterceptTouchEventup");
  14. System.out.println(111);
  15. returnfalse;
  16. }
  17. returnStaticConstant.isMove;
  18. }

3、在onItemLongClick里面改变isMove的值
Java代码
  1. StaticConstant.isMove=true;

4、在onTouchEvent up时改过来
Java代码
  1. StaticConstant.isMove=false;


结论:

GridVie onItemLongClick
按理说 只会触发 down
但是 在平板电脑中 当你触摸时 不可避免的会有move事件的

那么 为什么是 down move 后再onItemLongClick呢?

如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return false,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标view的onTouchEvent()处理。

注意 是之后和down一起传递下去

因为move紧跟着就发生了 所以 会和down一起传递给子view

所以 顺序是 down move move..... onItemLongClick


经测试 结论如下:
在平板电脑上:
onItemLongClick事件: down move LongClick up
onItemClick事件: down move up click

在模拟器上:
onItemLongClick事件: down LongClick up
onItemClick事件: down up click


更多相关文章

  1. Android(安卓)动态添加按钮,并获取id,添加事件
  2. android studio 快捷键(本文持续更新)
  3. JNI和NDK编程(一)
  4. Android实现蒙板效果
  5. Android:Click,LongClick,Touch,KeyDown,KeyUp事件使用心得
  6. RoboGuice logo Android上的Guice RoboGuice
  7. 【Android】代码开启/关闭GPS
  8. android 调试跟踪framework层代码
  9. Android(安卓)JNI代码

随机推荐

  1. Android(安卓)利用getApplication() 共享
  2. Android(安卓)Support 包里究竟有什么
  3. 安卓混合开发——原生Java和H5交互,保证你
  4. Android获取系统隐藏服务实现锁屏
  5. Android利用Fiddler进行网络数据抓包
  6. Android的Activity切换动画特效库SwitchL
  7. Android开发环境配置简介
  8. Android(安卓)IPC机制(三):浅谈Binder的
  9. Android编程内存溢出与防范方法浅析
  10. Mac OS X下用Eclipse浏览和编译Android源