오늘 알아볼 것은 터치 이벤트이다.
터치 이벤트에는 3가지 종류가 있다.
1. myView.setOnTouchListener(무명객체) - onTouch()
2. MyView extends View - onTouchEvent()
3. TouchEvent extends Activity - onTouchEvent()
이렇게 3가지가 있는데
각각 설명하자면
1번과 2번은 View 안에서의 터치가 일어났을때 호출되는 메서드이고
3번은 Activity에서 터치가 일어났을때 호출되는 메서드이다.
그래서 따라서 View를 터치하게 되면
myView.setOnTouchListener(무명 객체) - onTouch()
↓
MyView extends View - onTouchEvent()
↓
TouchEvent extends Activity - onTouchEvent()
이순으로 호출이 된다.
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TouchEventHandleProcess te = new TouchEventHandleProcess(this);
te.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.d("Listener","리스너에서 호출한것");
return false;
}
});
setContentView(te);
}
@Override
public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){
Log.d("Activity", "Activity에서 처리");
return false;
}
return true;
}
}
public class TouchEventHandleProcess extends View {
public TouchEventHandleProcess(Context context) {
super(context);
}
public TouchEventHandleProcess(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
Log.d("extends View", "extends View에서 처리");
return false;
}
return true;
}
}
위 두 소스를 가지고 직접 호출을 해보면 아래와 같은 결과를 받아 볼 수 있다.
위의 자바 소스를 보면 모든 터치 이벤트 함수는 반환 값이 boolean 값인것을 알수가 있다.
반환 값이 false 이면 해당 이벤트가 완전히 처리 되지 않다고 판단되어 다음 단계의 터치이벤트로가서 이벤트를 기다리는것이다.
반면에 반환값이 true이면 해당 이벤트가 완전히 처리되었다고 생각되어 다음단계의 터치 이벤트까지 내려가지 않고
해당 이벤트를 완료 처리한다.
위의 예제를 통해서 보자면 extends View에서 return true 시켜서 이벤트를 완료 처리를 하게 되면 다음 Activity에서의 터치 이벤트로 넘어가지 않는다.
위 사진을 보면 계속 누르고 있을 때 Activity로 넘어가지 않는다. 하지만 extends View 부분에서 return true이기 때문에
다른 이벤트를 감지할 수 있게 되어 터치에서 떼게 되면
처럼 터치에서 떼 진 이벤트를 감지해 리스너를 다시 호출하게 된 것이다.
뭐 말이 어려울 수 있는데 true면 해당 이벤트를 끝내고 다른 이벤트를 감지할 수 있고
false면 눌려지는것을 제외한 다른 이벤트를 감지하지 못한다.
그렇다면 터치 이벤트에서 감지할수 있는 이벤트들은 무엇이 있을지 알아보자.
감지할수 있는 액션은 크게 5가지가 있다.
1. ACTION_DOWN : 누르는 동작이 시작되는 것
2. ACTION_UP : 누르고 있다가 뗄 때
3. ACTION_MOVE : 누르는 도중에 움직임
4. ACTION_CANCEL : 터치 동작이 취소됨
5. ACTION_OUTSIDE : 터치가 현재의 위젯을 벗어남
이렇게가 있다.
'코딩일기 > android studio' 카테고리의 다른 글
안드로이드 독학 13일차 : 멀티 터치 이벤트(Multi Touch Event) (0) | 2021.03.25 |
---|---|
안드로이드 독학 12일차 : 터치로 그림그리기 (0) | 2021.03.25 |
Android 독학 10일차 : 커스텀 뷰(Custom View) 만들기 (0) | 2021.03.18 |
Android 독학 9일차 : View 생명주기(View를 그리는 과정) (0) | 2021.03.16 |
Android 독학 8일차 : RatingBar 이벤트 처리 (0) | 2021.03.12 |