Androidのタップ処理と長押しについて
KotlinでAndriodのタップ処理と長押しの処理を記述していきます。
tap処理
まずAndriodに触るのが久々すぎてiosのTouchesBeganのような処理をAndriodで書くにはどうしたら良いのか完全に忘れてしまったので、調べてみました。
@Override
override fun onTouchEvent(event: MotionEvent?): Boolean {
event ?: false
when (event!!.action) {
// タップされた時
MotionEvent.ACTION_DOWN -> {
Log.d("tap", "touchesBegan")
}
// タップ終了時
MotionEvent.ACTION_UP -> {
Log.d("tap", "touchesEndet")
// タップ後に動いた時
MotionEvent.ACTION_MOVE -> {
Log.d("tap", "touchedMoved")
}
}
return false;
}
onTouchEventの引数でfalseを返していますが、ここでfalseを返すと一番最初のeventのみを取得することになるので1本しかeventを取得しません。
trueで返した場合マルチタップの取得が可能になります。
長押しについて
Andriodで一定時間後に処理を行うにはHandlerとRunnableを使用するのが良いようです。
tap処理のコードにHandlerとRunnableを追加してあげると1秒後にログが出力されるようになりました!
コード
val longPressHandler = Handler()
val longPressReceiver = Runnable {
Log.d("tap", "長押しされたよ")
}
@Override
override fun onTouchEvent(event: MotionEvent?): Boolean {
event ?: false
when (event!!.action) {
// タップされた時
MotionEvent.ACTION_DOWN -> {
longPressHandler.postDelayed( longPressReceiver, 1000)
}
// タップ終了時
MotionEvent.ACTION_UP -> {
//ここで解除すれば1秒に満たない場合長押し失敗させることができる
longPressHandler.removeCallbacks( longPressReceiver )
}
}
return false;
}
参考文献
In onTouchEvent, ACTION_UP doesn’t work