Check Button Leave,Android

时间:2016-01-10 16:02:12

标签: android button coordinates actionlistener motionevent

这是问题......

我尝试做什么:

我的片段中有一个按钮,用户按下它。

我想知道用户的手指何时移出按钮。

我设法做了什么:

private Button btn;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ...

    btn = (Button) view.findViewById(R.id.btn);
    btn.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                // TODO do something
            } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
                checkIfFingerStillOnButton(event);
            }
            return true;
        }
    });
}

public void checkIfFingerStillOnButton(MotionEvent event) {
    boolean result = false;

    // Button limits
    float coordLeft = btn.getLeft();
    float coordRight = btn.getRight();
    float coordTop = btn.getTop();
    float coordBot = btn.getBottom();

    // Finger coordinates
    float X = event.getX();
    float Y = event.getY();

    if (X>coordLeft && X<coordRight && Y<coordTop && Y>coordBot) { result = true; }
}

到目前为止的结果:

这些功能返回的坐标不符合我的预期。

以下是点击按钮中间时的结果:

Left=312.0, Right=672.0, Top=670.0, Bottom=1030.0, 
X=189.0, Y=194.17029 | result=false

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

首先,你在上一次测试中出错了。 你必须做这个比较:

X>coordLeft && X<coordRight && Y>coordTop && Y<coordBot

其次,我认为坐标是相对于按钮而没有碎片。 尝试使用getRawX()getRawY()来获取与您的设备相关的值。

答案 1 :(得分:0)

以下是解决问题的方法:

boolean result = false;
int[] location  = new int[2];
btnStartGame.getLocationOnScreen(location);

// Finger coordinates
float X = event.getRawX();
float Y = event.getRawY();

// Button limits
float coordLeft = location[0];
float coordRight = location[0] + btnStartGame.getWidth();
float coordTop = location[1];
float coordBot = location[1] + btnStartGame.getHeight();

if (X>coordLeft && X<coordRight && Y>coordTop && Y<coordBot) {
    result = true;
    btnStartGame.setText("true");
} else {
    btnStartGame.setText("false");
}

我希望它会帮助别人。