java - 在 1 个 ImageButton 上同时使用 OnTouchListener 和 OnClickListener

标签 java android

我有一些 ImageButtons 我想同时使用,我已经像这样实现了 onTouch

addAppointment.setOnTouchListener(new MyTouchListener());

我得到了这个:

private final class MyTouchListener implements View.OnTouchListener {
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            vID = view;
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);

            return true;
        } else {
            return false;
        }
    }
}
<小时/>
class MyDragListener implements View.OnDragListener {

        @Override
        public boolean onDrag(View v, DragEvent event) {
            int action = event.getAction();
            switch (event.getAction()) {
                case DragEvent.ACTION_DRAG_STARTED:

                    break;
                case DragEvent.ACTION_DRAG_ENTERED:

                    break;
                case DragEvent.ACTION_DRAG_EXITED:

                    break;
                case DragEvent.ACTION_DROP:
                    eventLocation = (int) event.getX();

                    break;
                case DragEvent.ACTION_DRAG_ENDED:

                    if (event.getResult() == true) {
                        addTreatment(vID, eventLocation);
                        System.out.println(vID);
                    }else{
                        addTreatment(vID, 0);
                    }

                default:
                    break;
            }
            return true;
        }
    }

这工作完美无缺!但我还想添加 OnClickListener,因为如果您只需单击按钮,它应该执行不同的操作。 但是当我设置点击监听器时,它根本不起作用,它根本不会触发点击。

最佳答案

如果你从onTouch返回true,你就告诉android你处理了这个 Action ,它不需要再在你之后做任何事情。

如果您希望 Android 进一步处理该操作,其中还涉及将其传递给 onClick 处理程序,则必须在处理后从 onTouch 返回 false。

public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        vID = view;
        ClipData data = ClipData.newPlainText("", "");
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(data, shadowBuilder, view, 0);

        return false; // here
    } else {
        return false;
    }
}

另请参阅What is meaning of boolean value returned from an event-handling method in Android其中对此进行了更详细的解释。

关于java - 在 1 个 ImageButton 上同时使用 OnTouchListener 和 OnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37542210/

相关文章:

Android 和 RESTful 服务

android - 线程中的中断循环器

javascript - Android Webview触摸内容

Android SQLite 查询导致许多跳帧

java - 我如何用 Java 读取俄语文件?

java - 使绿色消失或透明

java - 初始化静态变量时使用局部变量

java - 尽管满足条件,while 循环仍不循环

android - 如何在android中进行线程操作

java - 如何在 java 代码中重现 eclipse 的运行参数?