728x90
TicketDialogFragment / OnViewCreated
//Swipe Gesture
binding.layoutSimpleScrollview.setOnTouchListener(object :
OnSwipeTouchListener(requireContext()) {
override fun onSwipeTop() {
super.onSwipeTop()
val intent = Intent(context, DetailActivity::class.java).apply {
putExtra(Constants.SHOW_ID, ticketId)
putExtra(Constants.FACILITY_ID, facilityId)
}
startActivity(intent)
activity?.overridePendingTransition(R.anim.slide_up, R.anim.no_animation)
}
})
}
onSwipeTop() 오버라이드해서 onSwipeTop() 호출될때의 코드 작성
예시에는 DetailActivity를 띄워주는 코드
activity?.overridePendingTransition(R.anim.slide_up, R.anim.no_animation)
- 액티비티 띄울 때 애니매이션 적용 (아래에서 위로)
res/anim/slide_up.xml / res/anim/no_animtaion.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromYDelta="100%"
android:toYDelta="0%" />
</set>
//no_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
</set>
OnSwipeTouchListener
더보기
import android.content.Context
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
//Gesture
open class OnSwipeTouchListener(ctx: Context) : View.OnTouchListener {
private val gestureDetector: GestureDetector
companion object {
private val SWIPE_THRESHOLD = 500 // 스와이프 거리를 늘릴 값
private val SWIPE_VELOCITY_THRESHOLD = 500 // 스와이프 인식에 필요한 최소 속도를 늘릴 값
}
init {
gestureDetector = GestureDetector(ctx, GestureListener())
}
private inner class GestureListener : GestureDetector.SimpleOnGestureListener() {
override fun onDown(e: MotionEvent): Boolean {
return true
}
override fun onFling(
e1: MotionEvent?,
e2: MotionEvent,
velocityX: Float,
velocityY: Float
): Boolean {
var result = false
try {
val diffY = e2.y - e1!!.y
val diffX = e2.x - e1.x
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight()
} else {
onSwipeLeft()
}
result = true
}
} else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeBottom()
} else {
onSwipeTop()
}
result = true
}
} catch (exception: Exception) {
exception.printStackTrace()
}
return result
}
}
fun onSwipeRight() {}
fun onSwipeLeft() {}
open fun onSwipeTop() {}
fun onSwipeBottom() {}
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
try {
return gestureDetector.onTouchEvent(event!!)
} catch (e: Exception) {
// Error Handling
}
return false
}
}
SimpleOnGestureListener
- 제스처 이벤트를 감지하는 데 사용되는 여러 콜백 메서드를 기본 구현으로 제공
onDown(e: MotionEvent): Boolean
- 메서드는 모든 제스처 이벤트가 시작될 때 호출 (true를 반환하여 이벤트 시퀀스를 처리)
onFling(e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean
- onFling(스크롤과 비슷하지만 손가락으로 튕길 때)
- 플링 제스처가 발생했을 때 호출
참고