Skip to content

Instantly share code, notes, and snippets.

@Benjoyo
Created February 5, 2017 15:55
Show Gist options
  • Save Benjoyo/053a44df9bb591537ce45bb3b1a2a26f to your computer and use it in GitHub Desktop.
Save Benjoyo/053a44df9bb591537ce45bb3b1a2a26f to your computer and use it in GitHub Desktop.
Android custom long press time/delay
import android.app.Fragment
import android.graphics.Rect
import android.os.Handler
import android.view.MotionEvent
import android.view.View
import android.view.ViewConfiguration
class LongPress: Fragment(), View.OnTouchListener {
val LONG_PRESS_DELAY = 500
val handler = Handler()
var boundaries: Rect? = null
var onTap = Runnable {
handler.postDelayed(onLongPress, LONG_PRESS_DELAY - ViewConfiguration.getTapTimeout().toLong())
}
var onLongPress = Runnable {
// Long Press
}
override fun onTouch(view: View, event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
boundaries = Rect(view.left, view.top, view.right, view.bottom)
handler.postDelayed(onTap, ViewConfiguration.getTapTimeout().toLong())
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
handler.removeCallbacks(onLongPress)
handler.removeCallbacks(onTap)
}
MotionEvent.ACTION_MOVE -> {
if (!boundaries!!.contains(view.left + event.x.toInt(), view.top + event.y.toInt())) {
handler.removeCallbacks(onLongPress)
handler.removeCallbacks(onTap)
}
}
}
return true
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment