본문 바로가기
안드로이드

[Android] 버튼 누르고있으면 카운팅 빠르게 올리기

by 코딩히어로 2023. 5. 22.
728x90

안드로이드 스튜디오의 버튼을 구현하여 숫자를 카운팅 할 때

setOnClickListener를 통해 한번 누를 때마다 하나의 카운팅을 하는 기능 구현이 가능합니다

하지만 숫자가 10, 20의 작은 범위의 값이 아닌 예를들어 0~999까지 올려야 된다면

버튼을 999번을 눌러야 하고 그만큼 시간도 많이 소요됩니다

 

이러한 문제를 해결하기 위해서 단순 클릭인 setOnClickListener를 이용한 카운팅도 구현하고

setOnTouchListener를 이용한 누르고 있을때 자동 카운팅 기능도 추가하면

사용자 입장에서는 많은 숫자를 올릴 때 버튼을 누르고 있기만 하면 되기에 매우 편리합니다

 

sensor_user_name_up.setOnTouchListener(new View.OnTouchListener() {
    private Handler mHandler;
    @Override 
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            if(mHandler != null) return true;
            mHandler = new Handler();
            mHandler.postDelayed(mAction, 500);
            break;
        case MotionEvent.ACTION_UP:
            if(mHandler == null) return true;
            mHandler.removeCallbacks(mAction);
            mHandler = null;
            break;
        }
        return false;
    }

    Runnable mAction = new Runnable() {
        @Override public void run() {
            if(bleObject.getSensorName()<999){
                bleObject.setSensorName(bleObject.getSensorName()+1);
            }
            sensor_user_name.setText("Gas Name:" + bleObject.getSensorNameString());
            check1.setChecked(true);
            mHandler.postDelayed(this, 10);
        }
    };
});

 

해당 코드에서는 MotionEvent.ACTION_DOWN이 발생할 때 500ms 이상 눌렸는지를

확인하여 mAction Runnable을 실행시킵니다

Runnable 내에서는 10ms 간격으로 숫자를 카운팅하기 때문에 일반적으로 사용자가 느끼기에

숫자가 연속적으로 올라가는것처럼 느껴집니다

10ms 단위이기 때문에 누르고 있는 동안 1초당 약 100의 카운팅이 가능합니다

728x90
반응형

댓글