`

2011.07.01——— android GridView 长按事件不管用

阅读更多
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







分享到:
评论

相关推荐

    android GridView长按拖动,删除

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据。在许多应用中,用户可能需要对GridView中的元素进行交互操作,比如长按拖动和删除。这个例子就是关于如何在Android的GridView中...

    GridView长按删除

    首先,我们需要在GridView的适配器(Adapter)中添加对长按事件的支持。适配器是连接数据源和视图的关键,它负责填充每个GridView的单元格。我们可以通过重写`getView()`方法并在其中设置长按监听器来实现这一功能:...

    Android自定义GridView长按拖动排序

    在Android开发中,自定义GridView以实现长按拖动排序是一项常见的需求,特别是在构建具有可交互界面的应用中。本文将详细讲解如何实现这样一个功能,同时包括震动提示、固定"更多"项以及保存排序状态到数据库。 ...

    GridView的点击事件

    GridView是Android开发中常用的一种控件,主要用于展示数据集,通常以网格的形式排列。它在各种应用中,如图片浏览、应用列表等场景下广泛应用。理解并掌握GridView的点击事件对于构建用户友好的界面至关重要。 ...

    Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据。这篇教程将深入探讨如何实现一个可拖拽的GridView,使用户能够通过长按并拖动来改变GridView中item的位置,实现item的实时交换...

    GridView长按显示删除按钮并实现删除功能

    在Android开发中,GridView是一种常见的布局管理器,用于展示数据集,通常用于创建网格状的视图。在很多应用中,我们可能需要为GridView的每个条目(Item)添加长按操作来显示额外的功能,例如删除按钮。本教程将...

    安卓Android源码——gridview分页效果.zip

    "安卓Android源码——gridview分页效果.zip"这个压缩包可能包含了一个实现GridView分页效果的示例项目。HorizontalGridView是GridView的一个扩展,它使得数据可以横向滚动,提供了更丰富的界面展示方式。 首先,...

    Gridview 长按可拖动图片功能!可长按删除,交换位置。

    在Android开发中,GridView是一种非常常见的控件,用于展示数据集,通常以网格形式排列。在标题和描述中提到的“Gridview 长按可拖动图片功能!可长按删除,交换位置”是一个高级功能,涉及到触摸事件处理、自定义...

    GridView长按显示删除按钮

    在Android开发中,GridView是一种常用的布局管理器,它允许我们以网格的形式展示数据集。"GridView长按显示删除按钮"的实现是常见的功能需求,通常用于数据操作如编辑或删除。这个功能增强了用户体验,使得用户可以...

    仿iOS抖动单行GridView长按显示删除图标

    在Android开发中,有时我们希望实现类似iOS的交互效果,比如“仿iOS抖动单行GridView长按显示删除图标”。这种功能通常用于提供用户一种直观的编辑方式,让他们可以通过长按元素并显示删除图标来删除不需要的项目。...

    GridView(长按拖动)

    在本主题“GridView(长按拖动)”中,我们将深入探讨如何实现GridView的一项高级特性——长按拖动功能,以及如何设置可移动和不可移动的区域。 在Android开发中,实现GridView的长按拖动功能需要通过以下步骤: 1. ...

    Android源码——GridView拖拽实例源码_new_07.7z

    这个“Android源码——GridView拖拽实例源码_new_07.7z”压缩包包含了实现GridView拖拽功能的示例代码,对于学习如何增强用户交互体验非常有帮助。 GridView的基础知识: 1. **定义**:GridView继承自AbsListView,...

    安卓Andriod源码——gridview分页效果.zip

    "安卓Andriod源码——gridview分页效果.zip"这个压缩包的学习可以帮助开发者理解和实现Android中的GridView分页效果,同时也能掌握HorizontalGridView的使用,提升Android应用的交互体验。实际开发时,应根据项目...

    GridView长按拖拽Item及自动滚屏效果

    首先,我们需要自定义一个GridView类,继承自Android的GridView,并重写其触摸事件处理。在`onTouchEvent`方法中,我们需要检测用户的长按操作。当用户长按时,我们可以通过`ACTION_DOWN`和`ACTION_MOVE`事件来识别...

    gridview单击选中长按拽动

    总结来说,“gridview单击选中长按拽动”涉及了Android开发中的GridView控件、点击事件监听、长按事件监听、拖放API的使用以及多选状态的管理。实现这样的功能需要对Android UI和事件处理有深入的理解,并能够灵活地...

    Android源码——GridView拖拽实例源码_new_07.zip

    这个"Android源码——GridView拖拽实例源码_new_07.zip"压缩包提供了一个关于GridView拖拽功能的具体实现示例。在本文中,我们将深入探讨GridView的拖拽功能及其在Android开发中的应用。 首先,我们需要理解...

    android Gridview分页实现

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据。当我们处理大量数据时,分页加载可以提高应用性能,减少内存消耗,并提供更好的用户体验。本篇文章将详细讲解如何在Android中利用...

    安卓Android源码——gridview分页效果.rar

    这个"安卓Android源码——gridview分页效果.rar"文件很可能是包含了一个实现GridView分页效果的示例项目。分页在大数据量展示时尤为重要,因为它提高了用户体验,避免一次性加载大量数据导致应用性能下降或内存溢出...

Global site tag (gtag.js) - Google Analytics