2013-05-30 150 views
0

我正在使用安卓谷歌地圖v2自定義標記。 的問題是,他們的工作罰款MDPI屏幕,而在華電國際xhdpi屏幕出現太小安卓谷歌地圖上的小自定義標記v2

我的標記物來自資產(或從服務器,通過HTTP),它們被設計爲160個dpi的位圖,所以只進行解碼,從而後我設置它們的密度屬性,如下面的簡化的代碼示例中:

InputStream inputStream = mAssetManager.open(filename); // Asset case 
InputStream inputStream = connection.getInputStream(); // HTTP case 
Bitmap icon = BitmapFactory.decodeStream(inputStream); 
icon.setDensity(160); 

當我把他們在地圖上,我做了以下內容:

BitmapDescriptor descriptor = BitmapDescriptorFactory.fromBitmap(icon); 
Marker marker = mMap.addMarker(new MarkerOptions() 
    .position(new LatLng(location.getLatitude(), location.getLongitude())) 
    .anchor(0.5f, 0.5f) 
    .icon(descriptor)); 

我所料,在V1圖庫,該庫將採取根據它們的密度縮放他們的照顧,比屏幕像素密度。但這似乎並沒有發生。這是v2地圖庫的限制嗎?在將它們放置在地圖上之前,我應該明確調整圖標的大小嗎?

回答

0

所以最後我採用了下面的解決方案。

定義一個變量,以保持顯示密度:

protected int mDpi = 0; 

在onCreate方法,初始化:

mDpi = getResources().getDisplayMetrics().densityDpi; 

根據顯示密度調整圖標的大小,通過使用這種方法:

protected Bitmap adjustImage(Bitmap image) { 
    int dpi = image.getDensity(); 
    if (dpi == mDpi) 
     return image; 
    else { 
     int width = (image.getWidth() * mDpi + dpi/2)/dpi; 
     int height = (image.getHeight() * mDpi + dpi/2)/dpi; 
     Bitmap adjustedImage = Bitmap.createScaledBitmap(image, width, height, true); 
     adjustedImage.setDensity(mDpi); 
     return adjustedImage; 
    } 
} 

添加dpi/2到分紅的目的是計算一個舍入商,而不是截斷的。

希望它有幫助!