[英]How does Android handle clicks?
無疑,Android具有確定用戶含義的可靠方法:單擊或滾動/移動。 是否有任何簡單的規則足以建立相同的行為?
這是我的問題。
我有一個控件,應該單擊它並運行自己的單擊處理程序,或者滾動(點按並移動)並使整個視圖滾動(我有一個在兩個方向上都滾動的自定義視圖,如果有必要, 這里就是一個想法 )。 因此,我設置了一個簡單的觸摸偵聽器,該偵聽器可以記住onEvent上onTouch上的點,並在MotionEvent.ACTION_UP上調用單擊處理程序(如果該點未更改)。
這在模擬器中效果很好,因為鼠標單擊非常精確,因此我沒有注意到任何危險,並且在三星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內部可能也有類似的東西。 但是嗎? 有人知道嗎 我對平台的任何來源都不熟悉,希望不要在該平台上挖掘,所以如果有人分享經驗,我將不勝感激。
您在尋找GestureDetector
嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.