首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OnLongClickListener不工作

OnLongClickListener不工作
EN

Stack Overflow用户
提问于 2016-09-01 18:24:39
回答 2查看 291关注 0票数 0

我有一个拖放代码。如果用户触摸该项目,则OnTouchListener

代码启动:

代码语言:javascript
运行
复制
View.OnTouchListener dragListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        // start move on a touch event
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);
            // API 24
            // view.startDragAndDrop(data, shadowBuilder, view, View.DRAG_FLAG_GLOBAL); // API 24
            view.setVisibility(View.VISIBLE);
            return true;
        }
        return false;
    }
};

但是我的代码上会有一个OnLongClickListener。如果用户持有该项目(长时间单击),则会在显示器上显示祝酒词:

代码语言:javascript
运行
复制
    homebutton.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View arg0) {
    Toast.makeText(UserArea.this, "laaaange geklickt", Toast.LENGTH_SHORT).show();
    return true;  
}
});

但这不管用-

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-06 17:03:19

编辑您的触摸事件,并根据阈值确定Touch或Long Press

代码语言:javascript
运行
复制
private float mDownX;
private float mDownY;
private final float SCROLL_THRESHOLD = 10;
private boolean isOnClick;

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            mDownX = ev.getX();
            mDownY = ev.getY();
            isOnClick = true;
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            if (isOnClick) {
                Log.i(LOG_TAG, "onClick ");
                //TODO onClick code
            }
            break;
        case MotionEvent.ACTION_MOVE:
            if (isOnClick && (Math.abs(mDownX - ev.getX()) > SCROLL_THRESHOLD || Math.abs(mDownY - ev.getY()) > SCROLL_THRESHOLD)) {
                Log.i(LOG_TAG, "movement detected");
                isOnClick = false;
            }
            break;
        default:
            break;
    }
    return true;
}
票数 1
EN

Stack Overflow用户

发布于 2016-09-06 15:20:42

从听者处返回false

代码语言:javascript
运行
复制
View.OnTouchListener dragListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        //your logic 
        return false;
    }
};

否则您的事件将被视为已完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39278501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档