【问题标题】:How to handle an action when a user removes a finger from a button?当用户从按钮上移开手指时如何处理动作?
【发布时间】:2019-05-18 03:56:49
【问题描述】:

当用户通过单击按钮将手指从按钮上拉开但未释放时,我需要处理该操作。我尝试使用 OnTouchListener,但据我了解,它只处理手指的移动或按钮的释放。

【问题讨论】:

    标签: android android-layout user-interface button ontouchlistener


    【解决方案1】:

    OnTouchListener 也存在:

    view.setOnTouchListener(new View.OnTouchListener() {
       @Override
       public boolean onTouch(View v, MotionEvent event) {
           if(event.getAction() == MotionEvent.ACTION_MOVE) {
               Rect r = new Rect(0, 0, view.getWidth(), view.getHeight());
               if (!r.contains((int)event.getX(), (int)event.getY()))
                   // your action
               return true;
           }
    
           return false;
       }
    });
    

    【讨论】:

    • 据我了解,当用户触摸按钮时会触发此动作,我需要一个动作,当他按下按钮并用手指离开边界时,没有释放它跨度>
    • 你的意思是拖动按钮吗?
    • 此时我需要在屏幕上执行某个操作
    • 查看更新的答案,当您拖动按钮时会调用此事件。
    • 但是当手指沿着按钮的表面移动而不超出其边界时也会调用它
    【解决方案2】:
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
    
        int action = event.getActionMasked();
    
        switch (action) {
    
            case MotionEvent.ACTION_DOWN:
    
    
                Log.d(TAG, "Action was DOWN");
                break;
    
            case MotionEvent.ACTION_MOVE:
                Log.d(TAG, "Action was MOVE");
                break;
    
            case MotionEvent.ACTION_UP:
    
    
                Log.d(TAG, "Action was UP");
    
    
    
                break;
    
            case MotionEvent.ACTION_CANCEL:
                Log.d(TAG,"Action was CANCEL");
                break;
    
            case MotionEvent.ACTION_OUTSIDE:
    
                Log.d(TAG, "Movement occurred outside bounds of current screen element");
                break;
        }
    
        return super.onTouchEvent(event);
    }
    

    希望这段代码对您有所帮助。

    【讨论】:

    • OnTouchEvent 没有被调用,因为触摸事件已经被按钮拦截了
    • 你也使用了onclick事件吗??
    • 是的,但我可以在 ACTION_DOWN 中做所有事情。另一个问题是我使用按钮选择器
    • 如果你使用 onclick 事件,你不能同时使用两者 OnTouchEvent 永远不会工作。
    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2014-03-15
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多