Android肯定有一些可靠的方法来确定用户的意思:点击或滚动/移动。是否有任何简单的规则足以构建相同的行为?
这是我的问题。
我有一个控件应该被点击并运行自己的点击处理程序,或者滚动(点击并移动)并使整个视图滚动(我有一个自定义视图,向两个方向滚动,here is the idea如果这很重要)。所以我设置了一个简单的触摸监听器来记住onEouch在MotionEvent.ACTION_DOWN上的点,如果该点没有改变,则调用MotionEvent.ACTION_UP上的click处理程序。
在模拟器中工作正常,因为鼠标点击是精确的,所以我没有注意到任何危险,我没有遇到任何问题我的三星Galaxy S Plus - 也许我在点击屏幕时非常准确。
然而,我的第一个beta测试者抱怨按钮不起作用 - 不是100%但是大多数时候,所以他们需要多次点击按钮直到它处理点击。他们中的一些人还告诉我,如果用手指的尖端触摸屏幕,按钮的效果会稍好一些。
经过一番思考,我认为他们可能会在点击时移动手指,因此DOWN和UP上的点不同,处理程序也没有确定点击。为了验证这一点,我添加了一个简单的改进,允许小漂移 - 这有帮助!测试人员证实,这个技巧让事情变得更好。这是处理程序的最终代码:
// This interface is for a real click handler that may differ depending on control.
interface Clicker {
boolean click(View v);
}
class ButtonTouchListener implements OnTouchListener {
private boolean _trackingButtonClick = false;
private Clicker _clicker;
// These two integers are the improvement.
private int downX = 0;
private int downY = 0;
public ButtonTouchListener(Clicker clicker) {
_clicker = clicker;
}
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = (int) event.getRawX();
downY = (int) event.getRawY();
trackingButtonClick = true;
// Calling the onTouchEvent of the main view that handles the global scrolling.
return onTouchEvent(event);
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_OUTSIDE:
int newX = (int) event.getRawX();
int newY = (int) event.getRawY();
int xOffset = downX - newX;
int yOffset = downY - newY;
// These two lines are the improvement also.
// 10 is a max move distance that I've simply guessed.
if (Math.abs(xOffset) >= 10 || Math.abs(yOffset) >= 10)
_trackingButtonClick = false;
// Calling the onTouchEvent of the main view that handles the global scrolling.
return onTouchEvent(event);
case MotionEvent.ACTION_UP:
if (_trackingButtonClick) {
_trackingButtonClick = false;
// Calling the click handler of the control.
return _clicker.click((View)v.getTag());
}
_trackingButtonClick = false;
return true;
default :
return onTouchEvent(event);
}
}
}
}
所以看起来我做了一个正确的猜测,Android可能内部有类似的东西。但是呢?有人知道吗?我不熟悉平台的任何来源,并希望不要去那里,所以如果有人分享经验我会很感激。