2012-06-26 2 views
0

나는 내 앱에서 콘서트홀의 작은지도를 구현해야합니다. POI가있을 것입니다. 확대/축소 할 수 있어야합니다.맞춤지도 POI

svg 파일로 작업 한 클래스를 그림으로 변환했습니다. ImageView를 확장하고 onDraw를 덮어 씁니다.

하지만 지금은 1.2Meg PNG와 동일한 기능을 수행 할 수있어, 내가 얻을 수있는 모든 메모리 오류입니다 ..

내가 사용 BitmapFactory.decodeResource, and then canvas.drawBitmap(bm, canvas.getMatrix(),null)

는, 누군가가 그렇게 할 곳 자습서를 가지고 있는가 아니면 그냥 내 방법에 문제가 있다는 말을 해줄까요?

감사합니다. 르노

답변

1

PNG 파일이 디스크에 1.2MB를 차지하는 반면

, 그것은 더 큰 것 메모리에 RGB 비트 맵으로 디코딩 될 것이다. 예를 들어, 800x600 픽셀 24 비트 RGB 비트 맵은 1.4MB의 메모리를 차지하지만 PNG로 압축하면 30kB로 작을 수 있습니다.

해결 방법은 현재 화면에 표시되는지도의 하위 섹션 만 렌더링하는 것입니다.

이 작업을보다 쉽게 ​​수행하려면 원본 이미지를 화면 크기의 정확히 1/4 크기로 나눌 수 있습니다. 이것은 항상 메모리에로드 이러한 작은 이미지에는 9 개 이상이 없을 것, 보장 : 이미지가 완벽하게 정렬되면

+--+----------+--------+ 
|1 | 2  | 3 | 
+--+----------+--------+ 
| |   |  | 
|4 | 5  | 6 | 
| |   |  | 
| |   |  | 
+--+----------+--------+ 
| |   |  | 
|7 | 8  | 9 | 
| |   |  | 
+--+----------+--------+ 

, 당신은 메모리에 4 개 이미지를 가질 필요가 유일한 것입니다. 스크롤 할 때 최적화를 위해 스크롤 방향으로 이미지를 미리 가져올 수 있습니다.

지도가 10000x10000 픽셀이고 화면이 480x800 인 경우 이미지의 가장자리를 확장하여 균등하게 분할 할 수 있도록 가장자리 또는 검은 색 (또는 배경색을 원하는대로 선택하십시오.) 가장자리를 확장하십시오. 이 경우 10080x10400을 사용합니다.

+0

윙윙 거리기는하지만, 처음에는 확대/축소, 화면에 엔디어 PNG가 표시됩니다. 다른 품질의 다양한 소스가 있어야하며 내 확대/축소 기능 (핀치 확대/축소, 단추 없음) –

+0

고정 된 줌 레벨을 지원할 수 있습니다. 각 레벨에 대한 이미지 세트를 생성합니다. 여기서 최상위 레벨은 전체 이미지의 축소 버전이고, 다음 레벨은 두 배 또는 세 배입니다. – Polynomial