概要
静電気を用いたスタンプをアプリ上で押してもらい、タッチされた座標を照合することでスタンプの整合性を確認する場合など、Android端末の画面上でユーザがタップした位置の座標を取得したい場合があります。その場合、ActivityクラスのonTouchEventまたはdispatchTouchEventメソッドをオーバーライドすることで、タップされた位置の座標を複数取得することができます。
用例
Activityクラス
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
this.onTouchEvent(event);
return super.dispatchTouchEvent(event);
}
private void onTouchEvent(MotionEvent motionEvent) {
// タップされた位置を取得する(指を離さずに動かした場合等は除外)
if (event.getActionMasked() == MotionEvent.ACTION_DOWN ||
event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
StringBuilder builder = new StringBuilder();
this.coordinates = new ArrayList<>();
int count = event.getPointerCount();
// 複数箇所がタップされた場合に対応
for (int i = 0; i < count; i++) {
int x = (int) event.getX(i);
int y = (int) event.getY(i);
Logger.d("# X: " + x + ", y: " + y + ", PointerID: " + event.getPointerId(i));
builder.append("(" + x + "," + y + "),");
Coordinate coordinate = new Coordinate(x, y);
this.coordinates.add(coordinate);
}
Logger.d("# 座標: " + builder.toString());
}
}
Coordinateクラス
public class Coordinate {
private int x;
private int y;
public Coordinate(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}