参考書「作って楽しむプログラミング 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