●캐릭터 이미지 불러오기
- 캐릭터로 사용할 이미지는 배경을 투명하게 처리두어야 한다. 먼저 캐릭터 이미지를 res폴더 안에 임의의 폴더 drawable에 저장한다. 이때 리소스로 사용할 파일 이름은 영어 소문자로 써야하고 숫자, 언더바등을 사용하여 작성한다.
- 이미지를 저장한 후 소스 코드에서 " Bitmap bitmap = BitmapFactory.decodeResource(리소스, 리소스 id); " 를 이용해서 비트맵을 읽어온다.
- 리소스는 " Resources res; res=context.getResources(); "를 사용하여 구한다.
- context가 매개변수로 넘오온 경우에는 다음과 같이 간단히 작성할 수 있다.
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.그림파일이름);
-canvas.drawBitmap()로 이미지를 출력한다.
canvas.drawBitmap(Bitmap bitmap, x좌표, y좌표, Paint paint);
●캐릭터의 기준 위치 설정
- Canvas에 이미지를 표시할 때는 기준점은 이미지의 좌측 상단이다. 출력할 이미지가 배경이면 상관없지만 움직이는 캐릭터의 경우 기준점을 좌측 상단으로 설정하면 충돌등의 이벤트를 판단하는데 번거롭기 때문에 기준을 캐릭터 정 가운데로 설정한다.
- 단말기 화면 좌측 상단을 좌표(0,0)으로 보고 캐릭터의 중심은 다음과 같이 구한다.
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.car);
int cw=bitmap.getWidth()/2; //car이미지의 너비 절반
int ch=bitmap.getHeight()/2; //car이미지의 높이 절반
canvas.drawBitmap(bitmap, x-cw, y-ch, null);
●화면에 캐릭터 이미지 출력하기 예제
●캐릭터 움직이기
- 캐릭터의 움직임은 캐릭터의 좌표를 설정해두고 이 좌표값을 변경시키고 변경된 좌표에 다시 캐릭터를 출력시킨다. 이 작업을 짧은 시간에 반복으로 실행해서 우리 눈에는 움직이는 것 처럼 보인다.
- 이 예제에서는 캐릭터를 onDraw()함수에서 그리고 있으므고 Timer나 Handler 등을 사용하여 일정한 간격으로 onDraw함수를 반복적으로 호출하여 계속해서 캐릭터가 출력되도록 한다.
- Handler는 주로 특정한 부분을 일정한 간격으로 반복해서 실행할때 사용한다.
-
Handler mHandler=new Handler(){
public void handleMessage(Message msg){
반복해서 처리할 부분;
mHandler.sendEmptyMessageDelayed(메시지 번호, 지연시간);
}
};
- 위와 같이 작성된 핸들러는 "mHandler.sendEmptyMessageDelayed(번호,시간); " 으로 호출한다. Handler는 한번만 호출해 두면 Handler가 알아서 반복할 부분을 지정한 간격으로 지속적으로 처리한다.
●캐릭터 움직이기 예제
●Touch Event 이용하기
- 다음 코드에서 터치를 받아서 처리한다.
@override
public boolean onTouchEvent(MotionEvent event){
if(event.getAction()==MotionEvent.ACTION_DOWN){
처리할부분;
}
return true;
}
- 다음은 자주 사용하는 동작이다.
ACTION_DOWN - 화면에 손이 닿았을때 발생
ACTION_UP - 화면에서 손을 뗐을때 발생
ACTION_MOVE - 화면을 누른상태에서 손을 이동하면 발생
●터치한 좌표로 캐릭터 이동시키기 예제
- 위의 예제에서 다음코드를 추가하면 된다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 ArrayList (0) | 2012.06.23 |
---|---|
안드로이드 비트맵 그림 자르기(slice) (0) | 2012.06.22 |
안드로이드 뷰(View) 1 (0) | 2012.06.21 |
안드로이드 버튼의 리스너 작성 (0) | 2012.06.20 |
안드로이드 액티비티의 화면 구성하기-레이아웃(layout) (0) | 2012.03.01 |
댓글