반응형
쓰레드를 이용한 간단한 문제를 하나 풀어보도록 하자
문제는 이미지뷰가 2개 가 있고 각각의 이미지 뷰를 클릭을하면 하나는 오른쪽으로 이동하다가 돌아오고 하나는 아래로 내려갓다 올라오는 형식으로 만들어 볼것이다.
귀찮아서 하나의 클래스에 묶어서 만들어 보았다.
메인영역
public class MainActivity extends AppCompatActivity {
ImageView img1, img2;
int im1, im2;
MainHandler handler = new MainHandler();
boolean first = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img1 = findViewById(R.id.img1);
img2 = findViewById(R.id.img2);
ImgTwoThread imgTwoThread = new ImgTwoThread();
ImgOneThread imgOneThread = new ImgOneThread();
img1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgOneThread.start();
}
});
img2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgTwoThread.start();
}
});
}
메인에서는 필요한 스레드인스턴스화와 이미지뷰를 클릭했을떄 스레드가 시작하도록 하였다 .
이미지뷰를 클릭함과 동시에 아래의 스레드가 실행 된다
쓰레드
class ImgOneThread extends Thread {
@Override
public void run() {
for (int i = 0; i <= 140; i++) {
try {
Thread.sleep(50);
if (i < 70) {
Message message = Message.obtain();
message.obj = 10;
message.what = 0;
handler.sendMessage(message);
} else if (i > 70) {
Message message = Message.obtain();
message.obj = -10;
message.what = 0;
handler.sendMessage(message);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
스레드에서는 140번(좌표가 아닌 일정한 거리를 움직이기 위해서 임의로 설정함 ) for문을 돌면서 절반은 정수 절반은 음수를 10씩 보내주고 있다 .
핸들러
class MainHandler extends Handler {
@Override
public void handleMessage(@NonNull Message msg) {
if (msg.what == 0) {
//1번이미지 영역
im1 += (Integer) msg.obj;
RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams) img1.getLayoutParams();
params1.leftMargin = im1;
img1.setLayoutParams(params1);
} else if (msg.what == 1) {
//2번이미지 영역
im2 += (Integer) msg.obj;
RelativeLayout.LayoutParams params2 = (RelativeLayout.LayoutParams) img2.getLayoutParams();
params2.topMargin = im2;
img2.setLayoutParams(params2);
}
}
}
}
쓰레드에서 보낸 값을 im1 이라는 변수에 계속해서 넣어주고있다.
고로 140번을 돌면서 10씩 증가 감소가 일어나며 그 값이 이미지뷰의 마진값으로 할당 해주고 있다 .
결과값~
물론 내가 한게 정답이 아닐수도 있다 . 강사님께서 하신것들이 더욱 간결하고 가독성좋게 코딩했을수도 있으나
배운 내용을 활용하여 동작이 되는 프로그램을 만들었다는거에 만족하자~ !
반응형
'아옳옳의 코딩공부 > 아옳옳의 안드로이드스튜디오' 카테고리의 다른 글
2021-05-12안드로이드 스튜디오(파일 입출력2 sd) (0) | 2021.05.13 |
---|---|
2021-05-12안드로이드 스튜디오(파일 입출력) (0) | 2021.05.12 |
2021-05-6안드로이드 스튜디오(Thread 2, AsyncTask ) (0) | 2021.05.06 |
2021-05-4안드로이드 스튜디오(Thread ) (0) | 2021.05.04 |
2021-04-27안드로이드 스튜디오(머터리얼 디자인 NavigationDrawer , NavigationView) (0) | 2021.04.26 |