【Kotlin/Android】MotionEventの種類!タップイベントや座標の取得
この記事からわかること
- Android Studio/Kotlinでタップイベントを取得する方法
- MotionEventの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
MotionEventの種類
Kotlinではタップイベント型がMotionEvent
として定義されています。ユーザーが画面をタップした際にはACTION_DOWN
イベントが発火され、タップされたX/Y座標やタップの圧力、サイズ、方向などの情報を含むイベントを配信します。
タップされた際のMotionEvent
には一意のポインターIDが振られ、タップイベントが終了するまで保持され、マルチタップスクリーンの場合は複数のタップイベントをポインターIDで識別して同時に操作することが可能になっています。
MotionEventの種類
定数 | アクション |
---|---|
ACTION_DOWN | タップされた時 |
ACTION_MOVE | タップしたまま移動した時 |
ACTION_UP | タップした指を離した時 |
ACTION_CANCEL | タップがキャンセルされた時 |
ACTION_OUTSIDE | 画面要素の範囲外で動きが発生した時 |
タップイベントを取得する
Activity
などではonTouchEvent
メソッドをオーバーライドすることで画面のタップイベントを取得することが可能です。
class MainActivity : AppCompatActivity() {
private var DEBUG_TAG = "----"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
return when (event.action) {
MotionEvent.ACTION_DOWN -> {
Log.d(DEBUG_TAG, "タップした")
true
}
MotionEvent.ACTION_MOVE -> {
Log.d(DEBUG_TAG, "タップしたまま動かした")
true
}
MotionEvent.ACTION_UP -> {
Log.d(DEBUG_TAG, "タップした指を離した")
true
}
MotionEvent.ACTION_CANCEL -> {
Log.d(DEBUG_TAG, "タップがキャンセルされた")
true
}
MotionEvent.ACTION_OUTSIDE -> {
Log.d(DEBUG_TAG, "画面要素の範囲外で動きが発生した")
true
}
else -> super.onTouchEvent(event)
}
}
}
公式リファレンス:Activity または View のタップイベントをキャプチャする
MotionEvent
型から以下のようにアクション定数やX/Y座標、ポインターIDなどを取得することが可能です。
Log.d(DEBUG_TAG, event.action.toString())
Log.d(DEBUG_TAG, event.x.toString())
Log.d(DEBUG_TAG, event.y.toString())
Log.d(DEBUG_TAG, event.getPointerId(0).toString())
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。