円を描きたいAndroidアプリケーションがあります
OnTouchListener を使用しました。
問題は、ユーザーが円を所定の位置に「保持」すると、アクションが更新されないことです。
OnTouchListenerを使用して、ユーザーが指を動かしていないときに、ユーザーの指がオンになっているかどうかを知るにはどうすればよいですか
円を描きたいAndroidアプリケーションがあります
OnTouchListener を使用しました。
問題は、ユーザーが円を所定の位置に「保持」すると、アクションが更新されないことです。
OnTouchListenerを使用して、ユーザーが指を動かしていないときに、ユーザーの指がオンになっているかどうかを知るにはどうすればよいですか
onTouchEvent をトリガーしているイベントの種類を確認する必要があります。
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//Do Nothing
return true;
case MotionEvent.ACTION_MOVE:
//Do Something
path.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
//Do Nothing
break;
default:
return false;
}
// Schedules a repaint.
invalidate();
return true;
}
MotionEvents の詳細については、こちらを参照してください。
を使えばわかる
MotionEvents:
詳細はこちら: MotionEvents
ACTION_DOWN is for the first finger that touches the screen. This starts the gesture. The pointer data for this finger is always at index 0 in the MotionEvent.
ACTION_POINTER_DOWN is for extra fingers that enter the screen beyond the first. The pointer data for this finger is at the index returned by getActionIndex().
ACTION_POINTER_UP is sent when a finger leaves the screen but at least one finger is still touching it. The last data sample about the finger that went up is at the index returned by getActionIndex().
ACTION_UP is sent when the last finger leaves the screen. The last data sample about the finger that went up is at index 0. This ends the gesture.
ACTION_CANCEL means the entire gesture was aborted for some reason. This ends the gesture.
これはStackOverFlowを読むための良い答えです
タッチをその種類でフィルタリングします:
boolean onScreen = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX(); //X coord of the touch
float eventY = event.getY(); //Y coord of the touch
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// User has touched the screen
onScreen = true;
return true;
case MotionEvent.ACTION_MOVE:
// Finger is being dragged on the screen
onScreen = true; //Not required, just for clarity purposes.
break;
case MotionEvent.ACTION_UP:
// User has lifter finger
onScreen = false;
break;
default:
return false;
}
if(onScreen) {
//Finger is on the screen
}
return true;
}