5

cho đến bây giờ tôi đã sử dụng drawable để điền điểm đánh dấu trên bản đồ của tôi. Bây giờ tôi đã tự hỏi nó sẽ được mát mẻ nếu tôi có thể hiển thị tùy chỉnh imageview như một điểm đánh dấu trong bản đồ.Android: Cách đặt imageView làm điểm đánh dấu trong android API bản đồ google?

đến bây giờ tôi đang làm nó như

 itemized= new Itemazide(drawable, mContext); 

tôi muốn đạt được cái gì đó như

this

Trả lời

1

Yeah Tôi đã tự hỏi nếu tôi có thể làm một cái gì đó như thế này, tức là hiển thị một tùy chỉnh View thay vì drawable. Bạn có thể ghi đè lên phương thức draw(), nhưng thật không may là nó luôn luôn (ai đó vui lòng cho tôi biết tôi sai) phải có thể rút được. Tôi nghĩ rằng đó là vì tùy chỉnh View sẽ mất quá nhiều bộ nhớ.

Điều đó đang được nói, tùy thuộc vào những gì bạn đang cố gắng đạt được, có thể hack thư viện mapview-baloon để đạt được một số hiệu ứng tương tự.

EDIT: Bây giờ bạn đã thấy những gì bạn đang cố gắng để đạt được tôi nghĩ rằng bạn nên ghi đè draw() trong OverlayItem của bạn và trong phương pháp này thổi phồng ImageView của bạn. Nhưng tôi đã không cố gắng làm theo cách này, vì vậy có thể có một số nhược điểm (tôi nhớ một sợi SO trên một vấn đề tương tự mà tuyên bố, rằng nó sẽ làm gián đoạn tất cả các sự kiện liên lạc trên OverlayItem này).

+0

tôi đã nhìn vào điều này và bây giờ tôi đang cố gắng để thực hiện cho phép nhìn thấy ... – Akram

+0

MapView-baloon điều khác nhau của nó – Akram

+0

Nó cho phép bạn để thổi phồng bất cứ điều gì 'View' (bao gồm tùy chỉnh' ImageView') . Nhưng không ** thay vì ** của 'Drawable', thay vì nó (nhưng bạn luôn có thể sử dụng drawable trong suốt). Và tôi nghĩ rằng nó không phải là khó để hack nó, vì vậy nó không hiển thị onTap, nhưng thay vì luôn luôn. –

2

Tôi có thể hơi muộn nhưng tôi sẽ đăng giải pháp cho những người khác phải đối mặt/đang đối mặt với vấn đề tương tự. Vì vậy, về cơ bản những gì bạn phải làm (ít nhất là cho các giải pháp bạn đang tìm kiếm, tức là một hình ảnh tùy chỉnh áp đặt trên một nền giống như hộp) là áp đặt customImage trên hộp nền với sự giúp đỡ của một canvas. Sử dụng triển khai này, bạn có thể tạo BitmapDrawable một cách hiệu quả từ canvas mà sau đó bạn có thể gán làm điểm đánh dấu cho 'Lớp phủ'/'ItemizedOverlay' của bạn. Ngoài ra, vui lòng không tạo một ImageView cho mỗi lớp phủ vì điều này sẽ phá hủy hoàn toàn bộ nhớ/ứng dụng của bạn nếu bạn phải xử lý đồng thời với hàng nghìn ImageView như vậy. Thay vào đó, sử dụng BitmapDrawables có thể được gán cho các lớp phủ trong quá trình xây dựng của chúng và không tiêu thụ bộ nhớ gần như đủ như một ImageView.

public BitmapDrawable imageOnDrawable(int drawableBackground, Bitmap customImage) 
{ 
    //The following line is optional but I'd advise you to minimize the size of 
    //the size of the bitmap (using a thumbnail) in order to improve draw 
    //performance of the overlays (especially if you are creating a lot of overlays). 

    Bitmap customImageThumbnail = ThumbnailUtils.extractThumbnail(
                customImage, 100, 100); 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId); 
    bm = Bitmap.createScaledBitmap(bm, 112, 120, false); 

    Canvas canvas = new Canvas(bm); 
    canvas.drawBitmap(bm, 0, 0, null); 
    // The 6,6 in the below line refer to the offset of the customImage/Thumbnail 
    // from the top-left corner of the background box (or whatever you want to use 
    // as your background) 
    canvas.drawBitmap(customImageThumbnail, 6, 6, null); 

    return new BitmapDrawable(bm); 

} 
1
In google mapv2, map-view ballon like functionality is provided by default. 
Just, you have to write some lines for it : 

private GoogleMap mapView; 

if (mapView == null) 
      mapView = ((MapFragment) getFragmentManager().findFragmentById(
        R.id.map_view)).getMap(); 

     mapView.getUiSettings().setMyLocationButtonEnabled(false); 
     mapView.setMyLocationEnabled(true); 

MarkerOptions markerDestinationOptions; 
markerDestinationOptions = new MarkerOptions() 
        .position(latLngDestination)    .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)); 

mapView.addMarker(markerDestinationOptions);