=====================================================================================================================================
프리뷰 위에 이미지 떠다니는건 생각만큼 어렵지 않습니다.
다만 이미지를 랜덤으로 띄운다던가 아니면 이벤트를 줄때 속도를 높이기위해서 하는 작업들이 더 신중해야 한다는거 !!!
일단은 처음 부터 차근차근 해봅시다!
막히는건 같이 풀어가면 되는거고 ㅎ
일단 프리뷰 띄우는건
2010/07/20 - [멀티미디어/Camera] - 카메라 강좌 !!! 사진 찍고 저장해보자
다음으로 프리뷰 화면위에 이미지를 띄우겠습니다.
이미지는 애니메이션을 넣을지 음 효과를 넣을지는 개발자가 선택할 일이고 또 어렵지 않으니 기본작업 마치고 필요하시면 같이 해봐요 ㅎ
일단 화면위에 이미지를 띄울려면 가장 간단한 이미지뷰를 써야 겠죠
당연히 xml에서 이미지뷰를 만들어줘야겠죠
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background = "@drawable/icon"
/>
아이콘으로 띄웠습니다.
그럼 이놈의 위치를 랜덤으로 옮겨봅시다.
먼저 자바에서 쓰는 랜덤 함수를 불러 와서 써야겠네요 .
Random 함수겠죠
Ran_move = new Random();
move_X = Ran_move.nextInt(800) + 1;
move_Y = Ran_move.nextInt(480) + 1;
이렇게 하면 휴대폰 보통 800x480 해상도 니깐
x좌표를 1에서 800까지 랜덤하게 숫자 생성하고
y좌표는 1부터 480까지 랜덤하게 생성하여 (x,y)를 랜덤하게 좌표 지정 해주게 됩니다.
좌표는 됬으니 그럼 계속 움직여야 하는데 그건 어떻게 하는가 하는 방법에는 많은 방법이 있습니다.
타이머를 써도 되고
2010/08/03 - [Thread/Timer] - 타이머를 쓰레드 처럼 돌리자
딜래이를 줘도 되고
2010/08/04 - [Thread/Timer] - 딜래이 주기
간단한 방식이요 ㅎㅎ 게임이라 다른 엔진이있을진 모르겠지만 간단한 게임이니;; ㅎㅎ
전 쓰레드를 줘봤어요 ㅎㅎ
2010/02/02 - [Thread/Timer] - Thread 를 ~ 쓰레드를~ 사용하기//무한루프를 탈출.
void startHeavyDutyStuff() {
mTimerThread = new Thread() {
public void run() {
mThreadTimer_t = true;
while (mThreadTimer_t) {
Log.e("Thread", "run...");
try {
Thread.sleep(1 * 600);
messageHandler.sendMessage(Message.obtain(messageHandler,0x10));
} catch (InterruptedException e) {
}
}
}
};
mTimerThread.start();
}
이런식으로 간단하게 쓰레드를 함수를 생성하고 핸들러를 사용하여 0.6초마다 호출합니다.
messageHandler.sendMessage(Message.obtain(messageHandler,0x10));요넘이요
그럼 핸들러는 어떻게 하느냐
2010/04/21 - [Handler] - 기본 핸들러 액티비티 안에서 이동
참조하시고
private Handler messageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0x10:
move_X = Ran_move.nextInt(800) + 1;
move_Y = Ran_move.nextInt(480) + 1;
Log.e("move_X ="+move_X+"","move_Y ="+move_Y+"");
RelativeLayout.LayoutParams params = null;
params = (RelativeLayout.LayoutParams) Move_image.getLayoutParams();
params.leftMargin = move_X;
params.topMargin = move_Y;
Move_image.setLayoutParams(params);
case 0x20:
break;
}
}
};
이런식으로 했습니다.
move_X = Ran_move.nextInt(800) + 1;
move_Y = Ran_move.nextInt(480) + 1;
Log.e("move_X ="+move_X+"","move_Y ="+move_Y+"");
RelativeLayout.LayoutParams params = null;
params = (RelativeLayout.LayoutParams) Move_image.getLayoutParams();
params.leftMargin = move_X;
params.topMargin = move_Y;
Move_image.setLayoutParams(params);
요넘을 분석해 보자면 0.6초마다 이놈을 계속 호출할테니 그때마다 새로운 좌표를 얻기위해서
move_X = Ran_move.nextInt(800) + 1;
move_Y = Ran_move.nextInt(480) + 1;
변수를 새로 받아왔구요
파라미터를 이용하여
RelativeLayout.LayoutParams params = null;
params = (RelativeLayout.LayoutParams) Move_image.getLayoutParams();
params.leftMargin = move_X;
params.topMargin = move_Y;
Move_image.setLayoutParams(params);
릴래이티브 레이아웃의 이미지뷰 위치를 계속 이동하였습니다.
그럼 하나뿐이지만 실행해 볼까요
먼저 좌표 부터 로그 확인해봐요
계속 랜덤하게 좌표를 가져 오네요 그럼
실제로 잘이동하는지 봅시다.
ㅎㅎ 잘움직죠?? 스무스 하게 움직이는 방법도 많으니깐 잘 찾아보시면 좀더 부드럽게 움직이겠죠
그럼 다음 단계인 움직이는 이미지 누르면 이벤트 주거나 없애기? 없애기야 invisible 하면 되니깐
누르면 토스트 띄우는걸로 해볼꼐요
-_-0.6초는 너무 빠른가여 캡쳐 뜨느라 이미지 누르느라 ;;; 빡씸 ㅋㅋㅋ
터치 이벤트 등록하는 방법 볼께요
Move_image = (ImageView)findViewById(R.id.move_image);
Move_image.setOnTouchListener(move_icon);
아까 처음에 이미지뷰를 소스에서 연결해줘야겠죠
그다음에 터치이벤트에 등록하고
View.OnTouchListener move_icon = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
ToastTest();
return false;
}
};
private void ToastTest(){
Toast.makeText(this, "잡았다", Toast.LENGTH_SHORT).show();
}
'Android' 카테고리의 다른 글
안드로이드 HTML 파싱 JERICHO 파싱 (0) | 2012.07.29 |
---|---|
안드로이드 폰에서 개발, 마켓 등록 (0) | 2012.07.29 |
안드로이드 얼굴 인식 (0) | 2012.07.29 |
안드로이드 폰트 (0) | 2012.07.29 |
안드로이드 colorpicker (0) | 2012.07.29 |