티스토리 뷰
여러 이미지를 연속해서 바꿔가며 애니메이션 효과를 만들고 싶을 때 스레드를 사용하는 경우가 많다.
특히 표준 자바에서 게임 들에 사용하는 대부분의 애니메이션 효과는 스레드를 사용하므로 기존의 앱 소스를 안드로이드용으로 포팅하려고 할 때는 이미 만들어두었던 코드와 같은 방식을 사용하는 것이 가장 쉽기 때문에 많이 사용한다.
바로 예제를 한번 확인해보자.
ImageView를 하나 생성하고, 버튼을 눌렀을 때 스레드가 지속적으로 Runnable객체를 사용하여 ImageView의 이미지를 바꿔주는 간단한 예제이다.
◎MainActivity.java
package com.example.samplethreadanimation;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
ArrayList<Drawable> drawableList = new ArrayList<Drawable>();
Handler handler = new Handler(Looper.getMainLooper());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources res = getResources();
drawableList.add(res.getDrawable(R.drawable.face1, null));
drawableList.add(res.getDrawable(R.drawable.face2, null));
drawableList.add(res.getDrawable(R.drawable.face3, null));
drawableList.add(res.getDrawable(R.drawable.face4, null));
drawableList.add(res.getDrawable(R.drawable.face5, null));
imageView = findViewById(R.id.imageView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AnimThread thread = new AnimThread();
thread.start();
}
});
}
class AnimThread extends Thread {
public void run() {
int index = 0;
for(int i = 0; i < 100; i++) {
final Drawable drawable = drawableList.get(index);
index ++;
if(index > 4) {
index = 0;
}
handler.post(new Runnable() {
@Override
public void run() {
imageView.setImageDrawable(drawable);
}
});
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] Volley lib (0) | 2022.04.10 |
---|---|
[Android] HTTP로 웹 서버에 요청/응답하기 (0) | 2022.04.09 |
[Android] AsyncTask (0) | 2022.04.07 |
[Android] Thread로 메시지 전송 (0) | 2022.04.07 |
[Android] Runnable 2: postDelayed (0) | 2022.04.06 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- Promise
- redux-thunk
- javascript
- 인천 구월동 이탈리안 맛집
- await
- 이탈리안 레스토랑
- 정보보안기사 #실기 #정리
- react-native
- 파니노구스토
- 맛집
- Async
- react
- 인천 구월동 맛집
- redux
- AsyncStorage
- Total
- Today
- Yesterday