如何在GridView中的同一项上处理onItemClickListener和OnTOuchListener?

时间:2013-04-28 15:29:55

标签: android ontouchlistener onitemclicklistener

首先,我想为我的英语道歉。那不是我的母语。

我在Android中有一个简单的图库。图像加载到GridView。我对onItemClickListeneronTouchListener有疑问。我为onItemClickListener GridViewonTouchListener的孩子设置了GridViewImageViews onTouchListener。当我点击图像时,它应该显示在手机屏幕的中央,当我按下它时,它应该放大我手指所在的位置,当我松开手指时,它应该缩小。

问题是当设置{{1}}时,只会触发它。当我点击时和按下释放时我想知道。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在寻找检查返回event.getAction()常量的MotionEvent的值:

gridView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //Do something when user touch the screen 
                //(first touch event-before moving or releasing the finger)
                break;
            case MotionEvent.ACTION_UP:
                //Do something when user release the finger touching the screen.
                break;
            }
            return false;
        }
    });

当用户在从屏幕上释放手指之前移动手指时,你也有ACTION_MOVE存在(适合拖动......)

编辑:

onTouch()的问题在于它仅存在于整个视图(您的网格),而您没有onItemTouch()。一种解决方案是在onItemClick()发生在类定义变量(例如您单击的图片的Bitmap)时从项目中获取所需的信息,然后将其用于您需要的任何内容onTouch()事件。请记住onTouch()如果您在任何时候返回true,则表示您已经处理了触摸案例,onClick()将不会发生。此外 - 仅在从屏幕上释放手指时点击通话(表示MotionEvent.ACTION_UP),因此您不会在触摸事件中使用它。

要解决此问题,您需要使用onItemLongClick(),或者使用自定义适配器(onTouchListener)为网格中的每个项目设置getView()