mobile/android
5_Android_(터치, 제스처, 키이벤트)
스파이크12
2020. 5. 5. 16:39
터치이벤트처리
package org.techtown.sampleevent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import static java.sql.DriverManager.println;
public class MainActivity extends AppCompatActivity {
TextView textView;
// 2. 제스처 이벤트 처리를 위한 제스처 객체선언
GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
View view = findViewById(R.id.view);
// 1. 온터치리스너 등록(온터치 리스너 생성 -> onTouch가 자동으로 호출)
view.setOnTouchListener(new View.OnTouchListener() {
// MotionEvent (액션정보와 터치한 곳의 좌표 등이 담겨있음)
@Override
public boolean onTouch(View v, MotionEvent event) {
// 모션이벤트에서 액션정보를 담아 int action으로 참조함(정수값)
int action = event.getAction();
float curX = event.getX();
float curY = event.getY();
if(action == event.ACTION_DOWN) {
println("손가락 눌림 : " + curX + "," + curY);
} else if (action == event.ACTION_MOVE) {
println("손가락 움직임 : " + curX + "," + curY);
} else if (action == event.ACTION_UP) {
println("손가락 땜 : " + curX + "," + curY);
}
return true;
}
});
detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
println("onDown() 호출됨.");
return true;
}
@Override
public void onShowPress(MotionEvent e) {
println("onShowPress 호출됨.");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
println("onSingleTapUp() 호출됨");
return true;
}
// 손가락드래그(거리중요)
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
println("onScroll 호출됨 : " + distanceX + ", " + distanceY);
return true;
}
// 오랫동안 누르기
@Override
public void onLongPress(MotionEvent e) {
println("onLongPress() 호출됨");
}
// 빠른속도로 스크롤(속도중요)
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
println("onFling() 호출됨 : " + velocityX + ", " + velocityY);
return true;
}
});
View view2 = findViewById(R.id.view2);
view2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// view2를 터치했을때 발생하는 터치 이벤트를 제스처 디렉터로 전달
detector.onTouchEvent(event);
return true;
}
});
}
// textView에 보여주는 함수
public void println(String data) {
textView.append(data + "\n");
}
// 3. 키이벤트 처리(KEYCODE_BACK)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == event.KEYCODE_BACK) {
Toast.makeText(this,
"시스템 [BACK] 버튼이 눌렸습니다", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
}