java - Android 监听触摸释放

标签 java android touch-event ontouchlistener

我正在尝试监听触摸释放,但事件没有被触发。

这是我的代码:

public class MyView extends View {
    public MyView(final Context context) {
        super(context);
        setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent e) {
                if (e.getAction() == MotionEvent.ACTION_DOWN) {
                    makeToast("press", context);
                } else if (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL) {
                    makeToast("release", context);
                }

                return false;
            }
        });
    }

    void makeToast(String s, Context c) {
        CharSequence text = s;
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(c, text, duration);
        toast.show();
    }

}

Activity 类别:

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyView v = new MyView(getApplicationContext());
        setContentView(v);
    }
}

发生的情况是,当我触摸屏幕时,会出现一个写有“press”的 toast ,但是当我释放触摸时,不会出现 toast ,而我期待一个写有“release”的 toast 出现。

我错过了什么?

最佳答案

您需要在 onTouchListener 中返回 true 而不是 false。

发生的情况是,首先触发了“向下操作”,但您返回了 false,这意味着未处理“向下操作”。

如果您返回 true,它将确保它捕获的每个操作都得到充分处理,只有当您知道需要其他 View 来处理该操作时,您才会返回 false。

祝你好运!

关于java - Android 监听触摸释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19820764/

相关文章:

java - 具有 CompletableFutures 且没有自定义 Executors 的代码是否仅使用等于核心数的线程数?

java - 使用构造函数初始化数组中的值的最佳方法是什么?

android - Kotlin MyClass.class.java Unresolved 引用 : java

java - 使用数组时代码出错

Java嵌入html

android - Android源代码中哪里可以找到字符串资源?

android - JSON字符串格式异常

android - Dialog 或 DialogFragment 中的 Activity 是否有 dispatchTouchEvent() 的等价物

android - 滑动取消Android中的动画

android - 同一个触摸监听器被多次调用