본문 바로가기
android

Thread - 이미지 바꾸기

by 윈 Win 2021. 1. 22.
728x90

블로그 이사했습니다!

 

👇 블로그 이전 공지 👇

블로그 이전 안내 (tistory.com)

 

 

👇 새 블로그에서 글 보기 👇

[Android] Thread - 이미지 바꾸기 — Win Record (tistory.com)

 

 


 

Runnable 인터페이스로 이미지 변경하기

코드 흐름 :

ImageRunnable클래스 생성

(handler를 사용해 2초마다 이미지 변경)

start 버튼 클릭

ImageRunnable를 가진 thread 생성 및 실행(start())

thread 실행되며 1초마다 숫자 1씩 증가

stop 버튼 클릭

thread 중지(intterupt())

 

 


이미지 추가하기

Resource Manager의 Vector Asset을 사용해 Drawable 추가

 

이미지 추가하기

 

추가한 이미지

 

 


이미지 변경하기

이미지 아이디 배열 활용하여 Runnable 생성

 

class ImageRunnable implements Runnable {
    int[] images = {R.drawable.ic_twotone_ac_unit_24, R.drawable.ic_twotone_brightness_4_24,
    		R.drawable.ic_twotone_bug_report_24, R.drawable.ic_twotone_catching_pokemon_24,
            R.drawable.ic_twotone_policy_24};
    Handler handler = new Handler();
    boolean hasImageAlready = (ivImage.getDrawable() != null);

    @Override
    public void run() {
        while (true) {
            if (hasImageAlready) {
            // 시작하기 전 이미지뷰에 이미 이미지가 있으면 2초 있다가 다음 이미지로 변경하기
                try {
                    Thread.sleep(1000 * 2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    return;
                }
                hasImageAlready = false;
            }
            Log.d("image runnable", "image index: " + index);
            handler.post(new Runnable() {
                @Override
                public void run() {
                    ivImage.setImageResource(images[index]);
                }
            });
            index++;
            if (index == images.length) index = 0;
            try {
                Thread.sleep(1000 * 2);
            } catch (InterruptedException e) {
                e.printStackTrace();
                return;
            }
        }
    }
}

 

 

start, stop 버튼 클릭 메소드

 

@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.btn_image_start:
            btnStart.setVisibility(View.GONE);
            btnStop.setVisibility(View.VISIBLE);
            if (thread == null)
                thread = new Thread(new ImageRunnable());
            thread.start();
            break;
        case R.id.btn_image_stop:
            btnStart.setVisibility(View.VISIBLE);
            btnStop.setVisibility(View.GONE);
            thread.interrupt();
            thread = null;
            break;
        
        ...
    }
}

 

 


결과화면

 

 


전체 코드

ThreadPractice

 

 


이전 글

Thread - 화면 변경하기(초시계)

다음 글

Thread - 텍스트 변경하기

 


 

 

공부하며 정리한 글입니다. 내용에 대한 피드백은 언제나 환영입니다.

댓글