我没有在 OnTouchListener 中获取按钮释放 Toast

Im not Getting the Button Release Toast in OnTouchListners

问题是我没有获取按钮释放 Toast。 我在 xml 中有一个简单的视图,我正在执行 onTouch。

hidenBtn.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    int action = event.getActionMasked();
                    if (action == MotionEvent.ACTION_DOWN) {
                        firstTime=System.currentTimeMillis();
                        Toast.makeText(MainActivity.this, "Pressed", Toast.LENGTH_SHORT).show();
    
                    } else if (action == MotionEvent.ACTION_UP
                            || action == MotionEvent.ACTION_CANCEL) {
                        Toast.makeText(MainActivity.this, "Released", Toast.LENGTH_SHORT).show();
                        secondTime=System.currentTimeMillis();
                        if(secondTime-firstTime>=5000){
                            //do your actions here,prev,curr are fields in a class
                            ShowDialog();
                        }
                        else{
                            firstTime=0;
                            secondTime=0;
                        }
                    }
                    // TODO Auto-generated method stub
                    return false;
                }
            });

像这样更改您的OnTouchListener

hidenBtn.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getActionMasked();
            if (action == MotionEvent.ACTION_DOWN) {
                firstTime=System.currentTimeMillis();
                Toast.makeText(MainActivity.this, "Pressed", Toast.LENGTH_SHORT).show();
                return true;
            } else if (action == MotionEvent.ACTION_UP
                    || action == MotionEvent.ACTION_CANCEL) {
                Toast.makeText(MainActivity.this, "Released", Toast.LENGTH_SHORT).show();
                secondTime=System.currentTimeMillis();
                if(secondTime-firstTime>=5000){
                    //do your actions here,prev,curr are fields in a class
                    ShowDialog();
                }
                else{
                    firstTime=0;
                    secondTime=0;
                }
            }
            // TODO Auto-generated method stub
            return false;
        }
    });

您在 ACTION_DOWN returning false 这意味着您没有使用触摸事件,因此不会触发同一事件的其他步骤。因此你需要在 ACTION_DOWN 中 return true 这样你就可以拦截 ACTION_UP.