私のアプリケーションは、端から端までのボタンのグリッドです。すべてのタッチ イベントとモーション イベントをオーバーライドし、動作を手動で制御しています。指が画面外にドラッグされた場合を除いて、すべて正常に機能しています。MotionEvent.ACTION_UP がトリガーされますが、それは望ましくありません。getRawX() と getRawY() を使用して (たとえば、上端と左端の場合) 座標が < 1 であるかどうかを判断しようとしましたが、指をすばやくドラッグすると値が高くなります (20 まで)。ACTION_UP がトリガーされると、場所の値が少し遅れているように見えます。これを回避する方法はありますか?ACTION_CANCEL はまったくトリガーされないようです。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case (MotionEvent.ACTION_DOWN):
Log.i(classID, "action down");
return true;
case (MotionEvent.ACTION_CANCEL):
Log.i(classID, "action cancel");
// never called
return true;
case (MotionEvent.ACTION_MOVE):
Log.i(classID, "action move");
return true;
case (MotionEvent.ACTION_UP):
Log.i(classID, "action up");
Log.i(classID, "position: " + (int)event.getRawX() + "/" + (int)event.getRawY());
return true;
}
return false;
}