2016-09-04 2 views
7

Я пытаюсь отобразить пользователей на карте, я уже реализовал карту в приложении, но теперь я пытаюсь создать пользовательские маркеры, которые отображают фотографию пользователя внутри булавки, что-то вроде это: enter image description hereПользовательский маркер с изображением пользователя внутри вывода

Любая идея, как это сделать?

+0

уже видели у [это] (https://developers.google.com/maps/documentation/android-api/marker?hl= ru) Есть свойство значка объекта Marker –

+0

Я видел его, но это не помогло –

ответ

1

Вы можете настроить маркер с помощью собственного растрового изображения.

private static final LatLng mArea= new LatLng(lat, long); 
private Marker marker= mMap.addMarker(new MarkerOptions() 
          .position(mArea) 
          .title("mArea") 
          .snippet("Snippet").icon(yourBitmap)); 
+0

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

+0

http://stackoverflow.com/questions/14811579/how-to-create-a-custom-shaped-bitmap-marker-with-android-map-api-v2 Либо вам нужно создать пользовательский растровый рисунок используя холст, или вы можете просто получить его через webservice –

4

Я сделал это, принимая ссылку из телеграмм приложения Telegram App

Добавить маркер в Google Map

GoogleMap mMap; 
Marker marker; 

LatLng latLng = new LatLng(Double.parseDouble(lat), Double.parseDouble(long)); 
MarkerOptions options = new MarkerOptions().position(latLng); 
Bitmap bitmap = createUserBitmap(); 
if(bitmap!=null){ 
    options.title("Ketan Ramani"); 
    options.icon(BitmapDescriptorFactory.fromBitmap(bitmap)); 
    options.anchor(0.5f, 0.907f); 
    marker = mMap.addMarker(options); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
    mMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null); 
} 

Функция для создания растрового изображения

private Bitmap createUserBitmap() { 
    Bitmap result = null; 
    try { 
     result = Bitmap.createBitmap(dp(62), dp(76), Bitmap.Config.ARGB_8888); 
     result.eraseColor(Color.TRANSPARENT); 
     Canvas canvas = new Canvas(result); 
     Drawable drawable = getResources().getDrawable(R.drawable.livepin); 
     drawable.setBounds(0, 0, dp(62), dp(76)); 
     drawable.draw(canvas); 

     Paint roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     RectF bitmapRect = new RectF(); 
     canvas.save(); 

     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.avatar); 
     //Bitmap bitmap = BitmapFactory.decodeFile(path.toString()); /*generate bitmap here if your image comes from any url*/ 
     if (bitmap != null) { 
      BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
      Matrix matrix = new Matrix(); 
      float scale = dp(52)/(float) bitmap.getWidth(); 
      matrix.postTranslate(dp(5), dp(5)); 
      matrix.postScale(scale, scale); 
      roundPaint.setShader(shader); 
      shader.setLocalMatrix(matrix); 
      bitmapRect.set(dp(5), dp(5), dp(52 + 5), dp(52 + 5)); 
      canvas.drawRoundRect(bitmapRect, dp(26), dp(26), roundPaint); 
     } 
     canvas.restore(); 
     try { 
      canvas.setBitmap(null); 
     } catch (Exception e) {} 
    } catch (Throwable t) { 
     t.printStackTrace(); 
    } 
    return result; 
} 

Вычислить дп согласно к плотности устройства

public int dp(float value) { 
    if (value == 0) { 
     return 0; 
    } 
    return (int) Math.ceil(getResources().getDisplayMetrics().density * value); 
} 

livepin.png

avatar.png

Output

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