[Android] Thread - 이미지 바꾸기

2022. 10. 23. 02:00·Android
⚠️ 2021.01.22에 작성된 글입니다 ⚠️

 

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

 

 


 

 

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

728x90
저작자표시 비영리 변경금지 (새창열림)

'Android' 카테고리의 다른 글

[Android] 키보드 높이 이용해 키보드 올리기, 내리기  (0) 2022.10.23
[Android] 키보드 표시하기, 숨기기  (0) 2022.10.23
[Android] Thread - 텍스트 변경하기  (0) 2022.10.23
[Android] Thread - 화면 변경하기(초시계)  (0) 2022.10.22
[Android] Firbase 사진 업로드하기  (0) 2022.10.22
'Android' 카테고리의 다른 글
  • [Android] 키보드 높이 이용해 키보드 올리기, 내리기
  • [Android] 키보드 표시하기, 숨기기
  • [Android] Thread - 텍스트 변경하기
  • [Android] Thread - 화면 변경하기(초시계)
Wintinue
Wintinue
201 Created!
  • Wintinue
    Win Record
    Wintinue
    • 📘 Post (68)
      • Android (32)
      • Nest.js (1)
      • NGINX (1)
      • Error (10)
      • AWS (1)
      • Git (3)
      • IT용어 (4)
      • CMD (2)
      • Language (5)
        • PHP (3)
        • Java (2)
      • Project (5)
        • 개인 프로젝트 (3)
        • 팀 프로젝트 (2)
  • 링크

    • Github
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Wintinue
[Android] Thread - 이미지 바꾸기
상단으로

티스토리툴바