델리게이션 이벤트 모델<Delegation Event Model>

SO__OK·2023년 2월 9일
0

View의 기초와 활용

목록 보기
11/14


오늘 구현해 볼 알람 화면이다. 이벤트 처리 로직은 실제 앱에서 제공하는 기능을 이용하지 않고, 단순 토스트 문자열로 이벤트를 확인하는 정도로 처리하려 한다.

액티비티 클래스 자체를 이밴트 핸들러로 만들기 위해 두 개의 인터페이스를 클래스 선언 부분에 상속받고 인터페이스의 추상 함수를 재정의 했다.

클릭 이벤트의 콜백 함수인 onClick() 함수 그리고, CheckBox와 Switch의 상태 변경 이벤트에서 호출되는 onCheckedChange() 함수를 구현하였다.

자바 코드

public class DelegationEventModel 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_delegation_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);
    }

    @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 {
                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);
        }
    }
}

레이아웃 XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DelegationEventModel"
    android:background="#283593">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#3b479d"
        android:paddingBottom="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ampm"
        android:text="오전"
        android:textColor="#FFFFFF"
        android:layout_marginTop="56dp"
        android:layout_marginLeft="16dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/time"
            android:text="5:40"
            android:textSize="40dp"
            android:textColor="#FFFFFF"
            android:layout_marginLeft="16dp"
            android:layout_toRightOf="@+id/ampm"
            android:layout_alignBaseline="@+id/ampm"/>

        <Switch
            android:id="@+id/onOff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignBottom="@+id/time"
            android:buttonTint="#FF0000"/>

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/repeatCheck"
            android:text="반복"
            android:textColor="#FFFFFF"
            android:layout_below="@+id/ampm"
            android:layout_alignLeft="@+id/ampm"
            android:layout_marginTop="16dp"
            android:buttonTint="#FFFFFF"/>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/bell"
            android:src="@drawable/bell"
            android:layout_below="@+id/repeatCheck"
            android:layout_alignLeft="@+id/ampm"
            android:layout_marginTop="16dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/bell_name"
            android:text="Helium"
            android:textColor="#FFFFFF"
            android:layout_toRightOf="@+id/bell"
            android:layout_alignBottom="@+id/bell"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/label"
            android:text="라벨"
            android:textColor="#FFFFFF"
            android:layout_below="@+id/bell"
            android:layout_marginTop="16dp"
            android:layout_alignLeft="@+id/ampm"/>

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/vibrate"
            android:text="진동"
            android:textColor="#FFFFFF"
            android:layout_alignParentRight="true"
            android:layout_alignBaseline="@+id/bell_name"
            android:layout_marginBottom="16dp"
            android:layout_marginRight="16dp"
            android:buttonTint="#FFFFFF"/>

</RelativeLayout>

</LinearLayout>

✏️ 공부하면서 항상 느끼는 건데, 코드 다 치고 런 돌리니까 에뮬레이터에 에러떠서 뭔가 했는데.. 토스트 잘 못 적어서 ㅎ,, 진짜 한시간 동안 머리 싸매고 뭐가 문젠데..또.. 이러고 있었는데 너무 허접한 문제라서 실소만 나온다 ㅋㅋ

profile
찌끄레기 코딩

0개의 댓글