2011.07.01——— android GridView 长按事件不管用
参考:
http://lipeng88213.iteye.com/admin/blogs/1102048
问题:一个Gridiew的拖拽应用 在模拟器上 运行的没有一点问题
当我部署到平板电脑上 长按事件 不起作用了
研究:
public boolean onInterceptTouchEvent(MotionEvent ev) {
//这时候 你得到的x,y是在DragLayer下面得到的 这时候 容器 就是DragLayer了
int x = (int)ev.getX();
int y = (int)ev.getY();
switch(ev.getAction()){
case MotionEvent.ACTION_DOWN:
System.out.println("onInterceptTouchEvent down");
return false;
case MotionEvent.ACTION_MOVE:
System.out.println("onInterceptTouchEvent move");
return ture;
case MotionEvent.ACTION_UP:
System.out.println("onInterceptTouchEvent up");
System.out.println(111);
return false;
}
return super.onInterceptTouchEvent(ev);
}
我的Gridview的父类的onInterceptTouchEvent 是这样写的
在模拟器是没有问题的
我就想down up 我都向下传 但是move我会截获 进行一些操作
但是 在平板上 就出现问题了
onItemLongClick事件 根本就没有执行
后来 调试的时候 我发现
在平板电脑上长按时 down总是伴随着move
也就是说 onItemLongClick没有执行的原因就是这个move事件 里面我是return true的
解决:
1、建一个静态变量
//是否可以移动
public static boolean isMove = false;
2、修改onInterceptTouchEvent
public boolean onInterceptTouchEvent(MotionEvent ev) {
//这时候 你得到的x,y是在DragLayer下面得到的 这时候 容器 就是DragLayer了
int x = (int)ev.getX();
int y = (int)ev.getY();
switch(ev.getAction()){
case MotionEvent.ACTION_DOWN:
System.out.println("onInterceptTouchEvent down");
return false;
case MotionEvent.ACTION_MOVE:
System.out.println("onInterceptTouchEvent move");
break;
case MotionEvent.ACTION_UP:
System.out.println("onInterceptTouchEvent up");
System.out.println(111);
return false;
}
return StaticConstant.isMove;
}
3、在onItemLongClick里面改变isMove的值
StaticConstant.isMove = true;
4、在onTouchEvent up时改过来
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
分享到:
相关推荐
本例实现GridView的长按拖动和删除
GridView长按删除,博客地址:http://blog.csdn.net/yayun0516/,欢迎关注!
android自定义GridView长按拖动排序,类似支付宝首页,震动提示,固定最后一个“更多”item。退出应用程序后,保存修改的item位置到数据库,实现记住修改位置。
Android_API_中文_(15)_——_GridView.doc Android_API_中文_(15)_——_GridView.doc
安卓Android源码——gridview分页效果.zip
Gridview 长按可拖动图片功能!可长按删除,交换位置。
Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换 带超详细注释
安卓Android源码——gridview分页效果.rar
——将GridView导出为PDF 通过itextsharp
安卓Andriod源码——gridview分页效果.zip
Android源码——GridView拖拽实例源码_new_07.zip
android Gridview分页实现的一个小例子
安卓Android源码——GridView拖拽实例源码.zip
Android源码——GridView拖拽实例源码_new_07.7z
长按gridView布局显示删除按钮,再次长按删除按钮隐藏
感谢原创,感谢分享. GridView,长按Item后出现漂浮可拖拽的Item,并且在此Item移动到边缘时gridView会自动滚屏.
GridView实现长按Item可拖动,并设置可以移动区域和不可移动区域,值得学习.
Android源码——GridView + ViewFlipper布局界面,模仿“机锋市场.zip