处理手指在按钮区域中的进入和退出

时间:2019-07-19 05:08:10

标签: java android action android-button ontouchlistener

有一个gButton按钮和一个onTouch侦听器:

gButton.setOnTouchListener (new View.OnTouchListener () {
    public boolean onTouch (View v, MotionEvent event) {
        if (event.getAction () == MotionEvent.ACTION_DOWN) {
         ...
        } else if (event.getAction () == MotionEvent.ACTION_UP) {
        ...
        }
        return false;
    }
});

ACTION_DOWNACTION_UP(按下按钮/松开)完成了一些操作,但是按下事件仅在触摸按钮时发生,并且如果按下了按钮并且您将手指移开,什么也不会发生(没有手指点击)

我尝试在ACTION_DOWN之后添加其他类似ACTION_OUTSIDE的“ else if”条件(我从页面https://developer.android.com/reference/android/view/MotionEvent.html中获取了所有内容),但没有任何反应。是的,我使用的是If,而不是Switch

我需要确保在触摸按钮时(即使手指完全在按钮区域中,即使第一次触摸是在空白区域中并且手指移到了按钮上),也需要执行一些操作执行(例如,带有文本Toast的{​​{1}}方法),当您从按钮区域松开手指或从按钮区域移动手指时,还执行了其他操作({{1 }}的值为"On "

我试图通过在我的代码中对其进行更正来解决类似问题的答案之一:Cancel button press if user moves finger off button,但是显示错误prntscr.com/oghnm2,并且我不知道在哪里以及如何得到L,R,T,B,Toast除外;

1 个答案:

答案 0 :(得分:0)

我希望这可能会有所帮助,在这里我用btn坐标检查了鼠标指针的位置,如果它的位置在范围内,则打印日志,否则打印超出区域。

btn.setOnTouchListener(new View.OnTouchListener() {
           @Override
           public boolean onTouch(View v, MotionEvent event) {
               if(v.getLeft()<=event.getX() && v.getRight()>=event.getX() && v.getTop()<=event.getY() && v.getBottom()>=event.getY()) {
                   if (event.getAction() == MotionEvent.ACTION_DOWN)
                       Log.d("LOG", "pressed");
                    if (event.getAction() == MotionEvent.ACTION_UP)
                       Log.d("LOG", "released");
                    if (event.getAction() == MotionEvent.ACTION_MOVE)
                       Log.d("LOG", "moving");
               }
               else
               {
                   Log.d("LOG", "out of area");
               }
               return false;
           }
       });