2013-08-05 36 views
41

Tôi đang sử dụng phần mã này để thêm một dấu hiệu trong một MapFragment trong Google Map Version 2.Set Image from drawable như đánh dấu trong Google Map phiên bản 2

MarkerOptions op = new MarkerOptions(); 
op.position(point) 
    .title(Location_ArrayList.get(j).getCity_name()) 
    .snippet(Location_ArrayList.get(j).getVenue_name()) 
    .draggable(true); 
m = map.addMarker(op); 
markers.add(m); 

Tôi muốn sử dụng hình ảnh khác nhau từ drawable của tôi . Bất kỳ trợ giúp sẽ được đánh giá cao.

+6

làm 'BitmapDescriptor icon = BitmapDescriptorFactory.fromResource (R.drawable.current_position_tennis_ball)' và sau đó op. biểu tượng (biểu tượng); –

+0

Mr.Babar thanx for Your Answer của nó tốt và làm việc cho tôi ... U đăng nó như là một câu trả lời và tôi sẽ chấp nhận nó ... Thanx Một lần nữa. – NRahman

+0

@MuhammadBabar chúng ta có thể vượt qua hình ảnh ở tiêu đề – Amitsharma

Trả lời

93

Đây là cách bạn có thể đặt Drawable làm Marker.

BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.current_position_tennis_ball) 

MarkerOptions markerOptions = new MarkerOptions().position(latLng) 
     .title("Current Location") 
     .snippet("Thinking of finding some thing...") 
     .icon(icon); 

mMarker = googleMap.addMarker(markerOptions); 

VectorDrawablesXML dựa Drawables làm không làm việc với điều này.

+18

Điều này là đúng, mặc dù sử dụng từ "bất kỳ" có thể vẽ là không chính xác. Điều này chỉ cho phép bạn thiết lập BitmapDrawables. Bạn không thể, ví dụ, thiết lập một drawable từ xml với điều này. –

+3

Vâng, bạn có thể - bạn chỉ cần vẽ nó vào một 'Canvas' đầu tiên (' drawable.draw (canvas) '), sau đó đổ' Canvas' sang 'Bitmap'. –

+2

Các bạn thực sự không có bất kỳ ý tưởng nào về điều này ngay bây giờ! Vì vậy, để cho các phiếu bầu quyết định ai là chính xác :) –

6

Nếu bạn đã Drawable tạo programatically (do đó bạn không có tài nguyên cho nó), bạn có thể sử dụng này:

Drawable d = ... // programatically create drawable 
Canvas canvas = new Canvas(); 
Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
canvas.setBitmap(bitmap); 
d.draw(canvas); 
BitmapDescriptor bd = BitmapDescriptorFactory.fromBitmap(bitmap); 

Sau đó, bạn có BitmapDescriptor, mà bạn có thể vượt qua thành MarkerOptions.

+0

Điều này tạo ra hình ảnh trống cho tôi –

+0

Vui lòng tham khảo ví dụ được đăng bởi @vovahost để biết ví dụ hoàn chỉnh về phương pháp này. Câu trả lời này chưa hoàn chỉnh. – Alex

42

@Lukas Câu trả lời Novak không hiển thị bất kỳ điều gì vì bạn cũng phải đặt các giới hạn trên Drawable.
Điều này phù hợp với bất kỳ đối tượng nào có thể kéo. Dưới đây là một ví dụ làm việc đầy đủ:

public void drawMarker() { 
    Drawable circleDrawable = getResources().getDrawable(R.drawable.circle_shape); 
    BitmapDescriptor markerIcon = getMarkerIconFromDrawable(circleDrawable); 

    googleMap.addMarker(new MarkerOptions() 
      .position(new LatLng(41.906991, 12.453360)) 
      .title("My Marker") 
      .icon(markerIcon) 
    ); 
} 

private BitmapDescriptor getMarkerIconFromDrawable(Drawable drawable) { 
    Canvas canvas = new Canvas(); 
    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
    canvas.setBitmap(bitmap); 
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 
    drawable.draw(canvas); 
    return BitmapDescriptorFactory.fromBitmap(bitmap); 
} 


circle_shape.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> 
    <size android:width="20dp" android:height="20dp"/> 
    <solid android:color="#ff00ff"/> 
</shape> 
+0

Đây thực sự là một ví dụ hoàn toàn làm việc. Cảm ơn bạn – Odys

+0

Điểm đánh dấu đầu tiên của tôi được vẽ lớn hơn các điểm đánh dấu khác, tôi sử dụng chính xác cùng mã với bạn. Nguyên nhân có thể là gì ? Nó độc lập với nguồn hình ảnh tôi đã thử với người khác. – Recomer

+0

Tôi không biết. Đăng một số mã: các xml drawable hoặc cose được sử dụng để tạo drawable nếu bạn tạo nó theo chương trình. – vovahost