반응형
안드로이드에서 스와이프(Swipe) 제스처를 처리하는 방법은 GestureDetector
클래스를 사용하여 구현할 수 있습니다. GestureDetector
는 다양한 터치 제스처를 감지할 수 있는 유틸리티 클래스입니다. 여기서는 Java와 Kotlin에서 각각 스와이프 제스처를 처리하는 방법을 예제를 통해 설명하겠습니다.
1. Java를 사용한 스와이프 제스처 처리
예제: GestureDetector
를 사용하여 스와이프 처리
package com.example.swipehandling;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView swipeInfo;
private GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
swipeInfo = findViewById(R.id.swipeInfo);
gestureDetector = new GestureDetector(this, new SwipeGestureListener());
// 레이아웃에 터치 리스너를 설정하여 제스처를 감지합니다.
View layout = findViewById(R.id.layout);
layout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
}
private class SwipeGestureListener extends GestureDetector.SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
float diffX = e2.getX() - e1.getX();
float diffY = e2.getY() - e1.getY();
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();
}
return true;
}
} else {
if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeDown();
} else {
onSwipeUp();
}
return true;
}
}
return false;
}
private void onSwipeRight() {
swipeInfo.setText("Swiped Right");
}
private void onSwipeLeft() {
swipeInfo.setText("Swiped Left");
}
private void onSwipeUp() {
swipeInfo.setText("Swiped Up");
}
private void onSwipeDown() {
swipeInfo.setText("Swiped Down");
}
}
}
- 설명:
GestureDetector
와GestureDetector.SimpleOnGestureListener
를 사용하여 스와이프를 처리합니다.- 스와이프의 최소 거리와 속도를 설정하여 스와이프를 감지합니다.
onFling
메서드에서 스와이프의 방향을 감지하고, 각각의 방향에 대해 처리할 로직을 정의합니다.
2. Kotlin을 사용한 스와이프 제스처 처리
예제: GestureDetector
를 사용하여 스와이프 처리
package com.example.swipehandling
import android.os.Bundle
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var swipeInfo: TextView
private lateinit var gestureDetector: GestureDetector
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
swipeInfo = findViewById(R.id.swipeInfo)
gestureDetector = GestureDetector(this, SwipeGestureListener())
val layout: View = findViewById(R.id.layout)
layout.setOnTouchListener { _, event ->
gestureDetector.onTouchEvent(event)
true
}
}
private inner class SwipeGestureListener : GestureDetector.SimpleOnGestureListener() {
private val SWIPE_THRESHOLD = 100
private val SWIPE_VELOCITY_THRESHOLD = 100
override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean {
if (e1 == null || e2 == null) return false
val diffX = e2.x - e1.x
val diffY = e2.y - e1.y
return 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()
}
true
} else {
false
}
} else {
if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeDown()
} else {
onSwipeUp()
}
true
} else {
false
}
}
}
private fun onSwipeRight() {
swipeInfo.text = "Swiped Right"
}
private fun onSwipeLeft() {
swipeInfo.text = "Swiped Left"
}
private fun onSwipeUp() {
swipeInfo.text = "Swiped Up"
}
private fun onSwipeDown() {
swipeInfo.text = "Swiped Down"
}
}
}
- 설명:
- Kotlin에서도
GestureDetector
와GestureDetector.SimpleOnGestureListener
를 사용하여 스와이프를 처리합니다. onFling
메서드에서 스와이프의 방향을 감지하고, 각각의 방향에 대해 로직을 정의합니다.- 레이아웃에 터치 리스너를 설정하여
GestureDetector
의onTouchEvent
메서드를 호출합니다.
- Kotlin에서도
요약
- Java와 Kotlin 모두에서:
GestureDetector
를 사용하여 스와이프 제스처를 감지하고 처리합니다. GestureDetector.SimpleOnGestureListener
를 확장하여 스와이프 방향에 대한 로직을 구현합니다.onFling
메서드에서 스와이프의 거리를 계산하고, 방향에 따라 다른 처리를 수행합니다.
이렇게 하면 안드로이드에서 스와이프 제스처를 감지하고 적절하게 처리할 수 있습니다.
반응형
'android > UI' 카테고리의 다른 글
[ Android ] Password 입력창에서 패스워드 숨기고 보이기 (0) | 2024.08.02 |
---|---|
[ Android ] UI Item에 background 설정하기 (Java/Kotlin) (0) | 2024.08.02 |
[ Android ] 버튼 사용하기 (0) | 2024.07.31 |
[ Android ] RelativeLayout을 사용한 다양한 UI 예제 (0) | 2024.07.05 |
안드로이드 Custom View를 만들고 Key까지 처리하기 (0) | 2024.06.04 |