Android View 长按、滑动、和点击同时进行,在View的onTouch
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;
}


阅读更多
文章标签: Andriod View onTouch
个人分类: Android View onTouch
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Android View 长按、滑动、和点击同时进行,在View的onTouch

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭