안녕하세요.
canvas 를 사용하다 보니.. 아니 사용하려구 구글링을 하다 보니 여기 펍에 있는 게시물중에
해상도가 각기 다른 여러종류의 단말에서 동일한 크기로 이미지를 보여주고 클릭영역도 맞출수 있다는
게시물을 보았는데요.
개념적으로 써 있어서 저같은 초보한테는 어케 써먹을지 모르겠더군요..ㅇㅎㅎㅎ
그래서 차근차근 해보았습니다.
기종은 디자이어HD (800x480) 과 에뮬 (480x320) 으로 테스트하였습니다.
가로 모드로 보이게 하는 어플을 테스트하였는데요,
이미지원본의 크기는 800x480 으로 작업했습니다.
디자이너HD 에서는 화면을 꽉차게 보이던 것이 에뮬(480x320) 으로 가니까 게시물대로
오른쪽 70픽셀정도인가 없어져 버렸습니다.
그런데 신기한것은 800 픽셀의 그림이 480 픽셀의 에뮬에서는 70픽셀만 없어지고, 대충 크기조절이 되었다는 겁니다..
canvas 의 특징이었던것 같습니다. 맞나요????
그래서 게시물대로
float NewScaleX=canvas.getWidth()/(float)SCREEN_X; // SCREEN_X=800
float NewScaleY=canvas.getHeight()/(float)SCREEN_Y // SCREEN_Y=480
으로 스케일 파악후 canvas.scale 을 하였습니다.
public void onDraw(Canvas canvas){
canvas.scale(ScaleX, ScaleY);
canvas.drawBitmap(mainbackground,0,0,null);
}
어떻게 되었을까요? 해보신분 계시죠?ㅎㅎ
예상과 달리 에뮬의 (480x320)의 화면크기의 0.6 배율로 아주 작아졌습니다. 화면에 꽉차길 바랬는데 말입니다. T_T
그래서 log 를 찍어보니 이미지의 가로가 533 으로 나오는 신기한 현상이 생겨 버렸습니다...
그걸 스케일링 으로 0.6 배 했으니 480 화면에 꽉차지 않고 319 픽셀이 되어 버렸던 것이죠.
안드로이드 기본기가 안되어 있어서 화면의 해상도등을 잘 이해하지 못한터라 또. 구글링 하였는데 검색어를 머라고 치지가 참 머해서
그냥 몇시간 헤메였습니다.
그런데 예전에 이미지 크기 때문에 고생한적이 있어서 혹시나 하고 적용해 본게 있으니...
BitmapFactory.Options options =BitmapFactory.Options() 이었습니다.
options.inSampleSize = 1;
options.inPurgeable = true;
options.inDither = true;
options.inDensity=160;
일게 지정하고
mainbackground=BitmapFactory.decodeResource(context.getResources(),R.drawable.mainback,options);
해서 비트맵 불러오고
canvas.sclae 로 해 주었더니 해상도에 맞게 나오기는 했습니다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
궁금한 점은요~. (서두가 길었습니다. ^^)
여기 안펍의 자주하는 질문(?) 게시판에서 본 내용에는 저런게 안써져 있었는데요. 책에서도 저렇게 하라는 건 없습니다만...
해상도가 다른 기종에서도 동일하게(동일하게는 안보이죠...^^.) 보이도록 하려면 저런 방법을 쓰는게 맞는지요?
더 간결하고 실무에서 쓰시는 코드가 있다면 알려주시면 감사드리겠습니다.
게임 만드시는 분들은 다 알고 있는것 같긴 한던데요. 단서를 찾기가 힘드네요.. ^^
부탁드리겠습니다. ^^
재수없는사람은 저..를 말합니다..오해마시길.