터치, 키 이벤트

SO__OK·2023년 2월 9일
0

View의 기초와 활용

목록 보기
13/14


델리게이션 이벤트 모델로 구현한 동일한 화면을 하이어라키 이벤트 모델로 구현하 보자.

자바 코드

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() 함수를 추가해서 뒤로가기 버튼을 두 번 누르면 종료하는 로직을 작성하였다.

profile
찌끄레기 코딩

0개의 댓글