0

我是 Android 开发的新手,我想知道是否有一种方法可以将 TouchListener(或任何事件侦听器)添加到按钮,以便它对跨区域的移动做出反应。例如,如果我在屏幕中间有一个按钮,并且我从顶部开始滑动,它应该会在我的手指到达按钮区域时做出反应。

这是我认为可以做到的代码

    private OnTouchListener tLis = new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {

        // Perform Action
        Button b = (Button) findViewById(R.id.button1);
        b.setText("Touched");
        return false;
    }

    };

谢谢你的帮助!

4

1 回答 1

3

很不幸的是,不行。触摸事件由它们的父视图传递给子视图,并且只有当初始触摸事件(即 ACTION_DOWN)被发现在该视图的范围内时。如果视图没有看到 ACTION_DOWN,它将不会看到该手势的任何后续触摸事件。

这并不是说不可能,但它需要的工作不仅仅是在按钮上设置一个监听器。您需要创建一个自定义ViewGroup来填充屏幕区域,并可以监视它接收到的所有触摸事件,当它们在其边界内时将它们传递给按钮,而不管初始向下事件是否在那里发生。

自定义父视图的替代选项是覆盖dispatchTouchEvent()您的方法Activity并在那里监视触摸事件。虽然原理相同,但当您检测到手指在其边界内时,您需要手动将触摸事件转发给按钮。

转发事件将通过dispatchTouchEvent()直接使用MotionEvent您要传递的按钮调用按钮的方法来完成,可能会在转发之前稍微按摩一下以获得不同的 x/y 位置。

与往常一样,在 Android 中处理自定义触摸代码时,尽量不要覆盖您正在使用的方法的返回值,除非您确定必须这样做。这些值控制着应用程序中整个触摸事件的响应者链。

于 2012-07-11T22:23:57.110 回答