View자체를 touch했을때, 호출되는 함수
textView = findViewById(R.id.textView);
View view = findViewById(R.id.view);
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//onTouch에 대한 event를 motionEvent 객체로 전달됨
int action = motionEvent.getAction();
float curX = motionEvent.getX();
float curY = motionEvent.getY();
if(action == MotionEvent.ACTION_DOWN){
println("손가락 눌림: " + curX + "," + curY);
} else if (action == MotionEvent.ACTION_MOVE) {
println("손가락 움직임: "+ curX + "," + curY);
} else if (action == MotionEvent.ACTION_UP) {
println("손가락 뗌: " + curX + "," + curY);
}
return true;
//on touch 정상 처리완료
}
});
touch event를 gesturedetect해주는 객체
new gesturedetector 객체 정의
GestureDetector detector;
전달된 event에 대한 gesture로 변화하여 처리
detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(@NonNull MotionEvent motionEvent) {
println("onDown 호출됨");
return true;
}
@Override
public void onShowPress(@NonNull MotionEvent motionEvent) {
}
@Override
public boolean onSingleTapUp(@NonNull MotionEvent motionEvent) {
return false;
}
@Override
public boolean onScroll(@NonNull MotionEvent motionEvent, @NonNull MotionEvent motionEvent1, float v, float v1) {
return false;
}
@Override
public void onLongPress(@NonNull MotionEvent motionEvent) {
println("onLongPress 호출됨");
}
@Override
public boolean onFling(@NonNull MotionEvent motionEvent, @NonNull MotionEvent motionEvent1, float v, float v1) {
//velocity정보도 전달됨
println("onFling 호출됨 : " + v +", " + v1);
return true;
}
});
view에서 발생한 onTouch event 객체를 detector로 넘겨서 처리함
View view2 = findViewById(R.id.view2);
view2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
detector.onTouchEvent(motionEvent);
//event처리를 gesturedetector로 넘김
return true;
}
});
back button에 대한 화면 전환 제한 코드
editor > mouse right click > generate > override methods
activity 화면 안에 들어있는 함수들을 재정의할 수 있도록 함
@Override
//원래 정의된 onKeyDown이라는 기본 api를 내가 직접 override하겠다는 뜻
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
println("system back button onClicked");
return true;
//back 실행 안됨
}
return false;
}
화면 방향에 따른 event 처리
res > "layout-land" directory 추가
가로방향 layout으로 자동으로됨
layout-land 인식함 android studio가
방향 전환은 layout자체를 껐다가,
land방향을 다시 불러오는 과정이다
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showToast("onCreate 호출됨");
}
public void showToast(String data){
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
showToast("onDestroy 호출됨");
}
}
create와 destory toast message로 확인 가능
generate > override methods > onSaveInstanceState
현재 activity에 관련된 무언가?
가로방향 plainttext에 글자 저장 -> name에 저장 -> activity 종료시 onSaveInstanceState 의 name이라는 key에 값 저장
세로방향 textView2에 name 불러와짐
error의 경우는 logchat을 통해서 어떤 오류로 종료됐는지 알 수 있음
지금 button이 세로화면에만 있는데,
이때 가로화면에서 button에 setonclicklistner가 붙을 객체가 없기 때문에 앱이 강제종료된다.
따라서 button != null을 추가해서 강제종료를 막는다.