2013-09-27 4 views
0

У меня проблема с отображением растровых изображений. У меня есть растровое изображение (маркер), которое загружается из ресурса и помещается на карту, и я загружаю растровое изображение (аватар) с сервера с определенными размерами. Затем я помещаю аватар в центр маркера. В результате на одном телефоне все работает отлично, но на другом аватар больше, чем маркер.Изменение размера растрового изображения в соответствии с другими растровыми изображениями

Что мне делать?

+0

вам необходимо объединить два растровых изображений, а затем положить, что одного растрового изображения в качестве маркера –

ответ

0

ли этот путь Надеюсь, что это помогает вам

googleMap.addMarker(new MarkerOptions().title(markerData.get(USER_NAME)) 
          .icon(BitmapDescriptorFactory.fromBitmap(combineImages(BitmapFactory.decodeResource(getResources(), R.drawable.your_pin_marker_from_resorece), bitmapAvatar))) 
          .position(new LatLng(Double.parseDouble(markerData.get(USER_LAT)), Double.parseDouble(markerData.get(USER_LONG))))); 

Combile Изображения

public Bitmap combineImages(Bitmap frame, Bitmap image) { 
     Bitmap bitmapCreate = null; 
      Bitmap bitmapScale = null; 
     bitmapScale = Bitmap.createScaledBitmap(image, convertSizeToDeviceDependent(45), convertSizeToDeviceDependent(40), true); 

     bitmapCreate = Bitmap.createBitmap(frame.getWidth(), frame.getHeight(), Bitmap.Config.ARGB_8888); 

     Canvas comboImage = new Canvas(bitmapCreate); 

     comboImage.drawBitmap(bitmapScale, convertSizeToDeviceDependent(7), convertSizeToDeviceDependent(7), null); 
     comboImage.drawBitmap(frame, 0, 0, null); 
     if (frame != null) { 
      try { 
       bitmapScale.recycle(); 
       frame.recycle(); 
       image.recycle(); 
       bitmapScale = null; 
       frame = null; 
       image = null; 
      } catch (Throwable e) { 
      } 
     } 
     return bitmapCreate; 
    } 


public int convertSizeToDeviceDependent(int value) { 
     DisplayMetrics dm = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(dm); 
     return ((dm.densityDpi * value)/160); 
    } 
+0

Не могли бы вы объяснить мне convertSizeToDeviceDependent (int value) метод? – ghost

+0

Поскольку в устройстве Android так много разрешения и размера экрана. Поэтому, если я добавлю непосредственно 45 жестко закодированных, он не будет выдавать одинаковые данные во всех устройствах. Вот почему этот метод будет преобразовывать 45 как разрешение устройства и размер экрана. –

Смежные вопросы