float xDown, yDown, xUp; boolean isLongClickModule = false; boolean isLongClicking = false;
@Override public boolean onTouch(View view, MotionEvent motionEvent) { //当按下时处理 if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { xDown = motionEvent.getX(); yDown = motionEvent.getY(); Log.v("OnTouchListener", "Down"); } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {// 松开处理 //获取松开时的x坐标 if (isLongClickModule) { isLongClickModule = false; isLongClicking = false; } xUp = motionEvent.getX(); Log.v("OnTouchListener", "Up"); //按下和松开绝对值差当大于20时滑动,否则不显示 if ((xUp - xDown) > 20) { //添加要处理的内容 Toast.makeText(ShowPictureActivity.this, "scroll right", Toast.LENGTH_SHORT).show(); } else if ((xUp - xDown) < -20) { Toast.makeText(ShowPictureActivity.this, "scroll left", Toast.LENGTH_SHORT).show(); //添加要处理的内容 } else if (0 == (xDown - xUp)) { int viewWidth = view.getWidth(); if (xDown < viewWidth / 3) { //靠左点击 } else if (xDown > viewWidth / 3 && xDown < viewWidth * 2 / 3) { //中间点击 } else { //靠右点击 } /** * not scroll */ //showNavigation(); Toast.makeText(ShowPictureActivity.this, "not scroll", Toast.LENGTH_SHORT).show(); } } else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) { //当滑动时背景为选中状态 //检测是否长按,在非长按时检测 if (!isLongClickModule) { isLongClickModule = isLongPressed(xDown, yDown, motionEvent.getX(), motionEvent.getY(), motionEvent.getDownTime(), motionEvent.getEventTime(), 300); } if (isLongClickModule && !isLongClicking) { //处理长按事件 isLongClicking = true; } } else { //其他模式 } return false; } /* 判断是否有长按动作发生 * @param lastX 按下时X坐标 * @param lastY 按下时Y坐标 * @param thisX 移动时X坐标 * @param thisY 移动时Y坐标 * @param lastDownTime 按下时间 * @param thisEventTime 移动时间 * @param longPressTime 判断长按时间的阀值 */ private boolean isLongPressed(float lastX, float lastY, float thisX, float thisY, long lastDownTime, long thisEventTime, long longPressTime) { float offsetX = Math.abs(thisX - lastX); float offsetY = Math.abs(thisY - lastY); long intervalTime = thisEventTime - lastDownTime; if (offsetX <= 10 && offsetY <= 10 && intervalTime >= longPressTime) { return true; } return false; }