私は現在、Androidプログラミングをいじっていますが、さまざまなタッチイベント、つまり通常のタッチプレス(画面を押してすぐに離す)、長押し(画面に触れて指を離す)を検出するのに小さな問題があります) と移動 (画面上でのドラッグ)。
私がやりたかったのは、ドラッグできる画面に(円の)画像を表示することです。次に、それを 1 回押すと (短押し/通常押し)、トーストに関する基本的な情報が表示されます。長押しすると、リスト付きの AlertDialog が表示され、別の画像 (円、長方形、または三角形) を選択できます。
イベントを検出し、onDraw で画像を描画するために、独自の OnTouchListener を使用してカスタム ビューを作成しました。OnTouchListener.onTouch は次のようになります。
// has a touch press started?
private boolean touchStarted = false;
// co-ordinates of image
private int x, y;
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
touchStarted = true;
}
else if (action == MotionEvent.ACTION_MOVE) {
// movement: cancel the touch press
touchStarted = false;
x = event.getX();
y = event.getY();
invalidate(); // request draw
}
else if (action == MotionEvent.ACTION_UP) {
if (touchStarted) {
// touch press complete, show toast
Toast.makeText(v.getContext(), "Coords: " + x + ", " + y, 1000).show();
}
}
return true;
}
問題は、プレスが期待どおりに機能しないことです。画面に何気なく触れると、わずかな動きも検出され、タッチプレスがキャンセルされ、代わりに画像の周りが移動するためです。
ACTION_DOWN で 0 に設定した新しい変数「mTouchDelay」を導入し、MOVE を増やし、MOVE で >= 3 の場合は「move」コードを実行します。しかし、これは本当に進むべき道ではないと感じています。
また、長押しを検出する方法もわかりません。犯人は本当に常にトリガーしているように見える MOVE です。
私が大まかに望むものの例については、Android アプリケーション「DailyStrip」を参照してください。これは漫画の画像を示しています。画面に対して大きすぎる場合は、ドラッグできます。一度タップすると、一部のコントロールがポップアップし、長押しするとオプション メニューが表示されます。
PS。私の電話は1.5でしか動作しないため、Android 1.5で動作させようとしています。