这是问题......
我的片段中有一个按钮,用户按下它。
我想知道用户的手指何时移出按钮。
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
感谢您的帮助!
答案 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");
}
我希望它会帮助别人。