2011-11-02 9 views
1

나는 SurfaceView 클래스를 기반으로 안드로이드 용 게임을 개발 중입니다. 현재 나는 다른 화면 크기의보기를 최적화하려고 노력하고 있습니다.캔버스 비트 맵 드로잉 및 화면 밀도

문제 1 : 내 res 폴더에 PNG 파일이 있고 Canvas.drawBitmap을 사용하여 그립니다. 이 기사 (http://developer.android.com/guide/practices/screens_support.html)를 읽은 후에, 화면이 커지면 안드로이드가 비트 맵의 ​​크기를 조정한다고 생각했습니다. 불행히도 나는 앱에서 태블릿을 실행하거나 전화로 시작할 때 스케일링 (또는 변경)을 인식하지 못했습니다. 그러면 어떻게됩니까? 사용 가능한 공간을 계산하고 원본 및 대상 Rectangle을 사용하여 비트 맵을 그리는 멋진 전략을 생각해 내야합니까? 누군가가 모범 사례를 가지고 있거나 캔버스에 비트 맵을 그리는 방법을 알면 좋을 것입니다. 나는 이미 픽셀 < -> 딥 변환 주제를 읽었지만 내 애플 리케이션에서 그 "솔루션"을 어떻게 사용하는지 모르겠다. 그래서 어떤 도움을 주셔서 감사합니다 ...

문제 2 : 내 res 폴더에 3 PNGs 있습니다. 1 개의 ldpi, 1 개의 mdpi 및 1 개의 hdpi. Ldpi 이미지는 50px * 50px, mdpi는 75px * 75px, hdpi는 100px * 100px입니다. 에뮬레이터 (800 * 480)에서 앱을로드 할 때 100 * 100 PNG를 사용합니다. Acer Iconia 탭에서 앱을로드하면 75 * 75 이미지가 사용됩니다. 나는 hdpi가 큰 스크린 (= 탭)을위한 것이고 mdpi 또는 ldpi는 에뮬레이터 스크린을 위해 사용될 것이라고 생각했다. 적어도 나는 안드로이드가 탭에 또한 hdpi에 이미지를 사용하는 것이라고 생각하지만 난이 놀라게있어 ...뿐만 아니라 많은

... 4 긴 텍스트, 그냥 명확하게하려고 죄송합니다

감사이에 대한 모든 외식

cya EffDee

답변

1

도면의 크기를 계산하려면 Canvas.getDensity()을 사용할 수 있습니다.

화면의 DPI 값은 픽셀 수와 화면 크기에 따라 다릅니다. 정제에는 높은 해상도가 있지만 대부분은 꽤 큽니다. 이로 인해 DPI 값이 낮아집니다. 자세한 내용은 http://developer.android.com/guide/practices/screens_support.html

+0

의견을 보내 주셔서 감사합니다. 밀도와 함께 노력했지만 운이 없었어요 ... 난 아직도 조금 혼란 스럽다 ... 너비 (= w)와 높이 (= h)로 비트 맵을 얻었고 내 프로토 타입 - 비트와 같은 비트 맵을 그리는 대신으로 점 10,10으로 이동합니다. drawBitmap (myBitmap, 10, 10, null) ' 'doBymap (myBitmap, wholeBitmapRect, new Rect (10, 10, w * densityFactor, h * densityFactor) , null) ' 이것은 나를 미치게합니다! dpi 값으로 삭제하기위한 thx ... 이제 의미가 있습니다;) – Effdee

+0

이 게시물은 도움이 될 수 있습니다 : http://stackoverflow.com/questions/5014882/drawing-a-bitmap-on- a-canvas-got-scaled/5017017 # 5017017 – Thomas

1

이미지를 mdpi 폴더 (픽셀 aspect 1)에 넣고 모든 수평 크기로 밀도를 사용하는 것이 가장 좋습니다. 당신은 다른 해결책이있다

density = getResources().getDisplayMetrics().density; 

사용하여 이들과 다른 값을 얻을 수 있습니다 1.5 MDPI 밀도

src.left = offsetX * density; 
src.top = 0; 
src.right = (offsetX + width - 1) * density; 
src.bottom = height - 1; 
dst.left = x * density; 
dst.top = y; 
dst.right = (x + width - 1) * density; 
dst.bottom = height - 1; 
canvas.drawBitmap(myImageStrip, src, dst, null); 

1.0, LDPI 밀도 = 0.75이며, hdpi에 밀도 = : 예를 들어 당신이 할 수있는 모든 폴더에 동일한 이미지를 넣으십시오. 시스템은 적절한 것을 취할 것이므로, 값에 밀도를 곱할 필요가 없습니다. 그러나이 경우 동일한 이미지를 3 개 이상 복사해야합니다.