🔰 [Kotlin] 基礎 androidstudioタッチイベント 勉強用メモ


参考書「作って楽しむプログラミング Androidアプリ超入門」の勉強をまとめていきます。

環境

java: 1.8.0_281
kotlin:1.5.10

今回は画面のタッチ処理についてまとめていきます

タッチイベントの主な種類

操作名 概要
タップ 画面を1度叩く
ダブルクリック 画面を2回続けて叩く
フリック 画面をスライドさせる
ピンチイン 2本の指でつまむようにする
ピンチアウト 2本の指で広げるようにする

今回はタッチ処理についてなので、onTouchEventメソッドを使用する

onTouchEventメソッドのイベント定数

イベント定数 イベントのタイミング
ACTION_DOWN 画面がタッチされた時
ACTION_MOVE タッチしたまま移動した時
ACTION_UP タッチが離された時
ACTION_CANCEL 何らかの要因でタッチがキャンセルされた時

if文を使用した例

sample.kt
override fun onTouchEvent(event: MotionEvent?): Boolean {
        //イベントを限定,actionプロパティの値で変更可能
        if (event?.action == MotionEvent.ACTION_DOWN){
            if (omikujiNumber < 0 && omikujiBox.finish) {
                drawResult()
            }
        }
        return super.onTouchEvent(event) //※
    }

onTouchEventメソッドをAndroid Studioから作成した場合は、明示的に元のonTouchEventメソッドを実行する必要がある。
→スーパークラスであるActivityクラスの同メソッドをオーバーライドして使用した場合、他のタッチイベントが呼び出されなくなるだけでなく、他の処理が必要となってくる為。

whenを使用した例

sample.kt
    class MainActivity : Activity() {
        ...
        // This example shows an Activity, but you would use the same approach if
        // you were subclassing a View.
        override fun onTouchEvent(event: MotionEvent): Boolean {

            val action: Int = MotionEventCompat.getActionMasked(event)

            return when (action) {
                MotionEvent.ACTION_DOWN -> {
                    Log.d(DEBUG_TAG, "Action was DOWN")
                    true
                }
                MotionEvent.ACTION_MOVE -> {
                    Log.d(DEBUG_TAG, "Action was MOVE")
                    true
                }
                MotionEvent.ACTION_UP -> {
                    Log.d(DEBUG_TAG, "Action was UP")
                    true
                }
                MotionEvent.ACTION_CANCEL -> {
                    Log.d(DEBUG_TAG, "Action was CANCEL")
                    true
                }
                MotionEvent.ACTION_OUTSIDE -> {
                    Log.d(DEBUG_TAG, "Movement occurred outside bounds of current screen element")
                    true
                }
                else -> super.onTouchEvent(event)
            }
        }
    }

参考:https://developer.android.com/training/gestures/detector?hl=ja