델리게이션 이벤트 모델로 구현한 동일한 화면을 하이어라키 이벤트 모델로 구현하 보자.
자바 코드
public class HierarchyEventModel extends AppCompatActivity implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
TextView bellTextView;
TextView labelTextView;
CheckBox repeatCheckView;
CheckBox vibrateCheckView;
Switch switchView;
float initX;
long initTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hierarchy_event_model);
bellTextView = findViewById(R.id.bell_name);
labelTextView = findViewById(R.id.label);
repeatCheckView = findViewById(R.id.repeatCheck);
vibrateCheckView = findViewById(R.id.vibrate);
switchView = findViewById(R.id.onOff);
bellTextView.setOnClickListener(this);
labelTextView.setOnClickListener(this);
repeatCheckView.setOnCheckedChangeListener(this);
vibrateCheckView.setOnCheckedChangeListener(this);
switchView.setOnCheckedChangeListener(this);
}
// OnTouchEvent() 함수 추가, 왼쪽, 오른쪽으로 밀었는지 확인
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
initX = event.getRawX();
}else if (event.getAction() == MotionEvent.ACTION_UP) {
float diffX = initX-event.getRawX();
if (diffX>30){
showToast("왼쪽으로 화면을 밀었습니다.");
}else if (diffX<-30){
showToast("오른쪽으로 화면을 밀었습니다.");
}
}return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - initTime>3000) {
showToast("종료할려면 한번 더 누르세요.");
// 현재 시간 저장
initTime = System.currentTimeMillis();
}else {
// 3초 이내에 Back button이 두 번 눌린 경우. Activity 종료
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
private void showToast(String message) {
Toast toast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
toast.show();
}
@Override
public void onClick(View v) {
if (v == bellTextView) {
showToast("bell text click event...");
}else if (v == labelTextView) {
showToast("label text click event");
}
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView == repeatCheckView) {
showToast("repeat checkbox is"+ isChecked);
}else if (buttonView == vibrateCheckView){
showToast("vibrate checked is"+ isChecked);
}else if (buttonView == switchView) {
showToast("switch is"+ isChecked);
}
}
}
onTouchEvent() 함수를 추가해서 화면을 왼쪽, 오른쪽으로 밀었는지 확인하는 코드를 작성하였다. 또한 onKeyDown() 함수를 추가해서 뒤로가기 버튼을 두 번 누르면 종료하는 로직을 작성하였다.