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