簡體   English   中英

Android Google Map V2:如何在點擊其他標記時更改以前點擊的標記圖標

[英]Android Google Map V2: How to change previous clicked marker's icon when clicked on another marker

更新:我通過添加previousMarker對象解決了性能問題。 因此,只有先前單擊的標記將被刪除並替換為默認圖標。 但是,當我單擊標記時,信息窗口仍未顯示。


我有一個地圖視圖並在其上設置了一些標記。 我想要的是當我點擊一個標記時,它將其圖標更改為一個不同的圖標,當我點擊另一個標記時,前一個標記的圖標應該更改為其原始圖標。

我所做的就是這樣,但只要我點擊標記就會改變標記圖標。

@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.

    LatLng markerPos=marker.getPosition();
    String markerLocationName=marker.getTitle();
    String markerSubCategoryName=marker.getSnippet();

    marker.remove();

    MarkerOptions markerOptions =
            new MarkerOptions().position(markerPos)
                    .title(markerLocationName)
                    .snippet(markerSubCategoryName)
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.new_icon));// Changing marker icon
    mMap.addMarker(markerOptions);
    Log.d("marker","change marker icon"); // can open a dialog window here
    return false;
}

因此,如果我單擊2個標記,我將顯示2個新圖標,同時我想要的只是當前單擊的標記更改其圖標。

所以我也做了類似的事情,增加了2行代碼。 它成功地做了我想要的但它有一些缺點(見下文)。

@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.

    mMap.clear();
    populateAllMarkersOnMap();//repopulate markers on map

    LatLng markerPos=marker.getPosition();
    String markerLocationName=marker.getTitle();
    String markerSubCategoryName=marker.getSnippet();

    marker.remove(); //remove the current clicked marker

    MarkerOptions markerOptions =
            new MarkerOptions().position(markerPos)
                    .title(markerLocationName)
                    .snippet(markerSubCategoryName)
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.new_icon));// Changing marker icon
    mMap.addMarker(markerOptions); //add marker with new icon into map
    return false;
}

缺點是1 /它“禁用”信息窗口(同樣的事情也發生在第一種方式)。 2 /清除地圖上的所有標記並再次設置所有標記。 想象一下,我有100個標記,如果每次點擊都會出現性能問題嗎?

populateAllMarkersOnMap()目前可以像這樣簡單:

private void populateAllMarkersOnMap(){
    setMarker(latA1, lonA1, "A1","A1.1"); 
    setMarker(latA2, lonA2, "A2","A2.1"); 
    // ... (100 times or populated via a loop) 
};

那么當我點擊新標記時,有沒有辦法讓以前點擊的標記將其圖標更改回默認值? 為我的英語道歉,如果你認為我應該為我的問題添加另一個標題,請幫忙。

最后,我發現了最好,最簡單的方法。 我制作了一個previousMarker對象並存儲了當前點擊的標記:

@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.
    if(previousMarker!=null){
        previousMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.dot_icon));
    }
    marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ct_icon));
    previousMarker=marker; //Now the clicked marker becomes previousMarker
    return false;
}

你可能正在尋找這種方法

 Called when the marker's info window is closed. 
optional public func mapView(mapView: GMSMapView, didCloseInfoWindowOfMarker marker: GMSMarker)

我找到了最好,最簡單的方法。 我制作了另一個標記對象並存儲當前點擊的標記,在此輸入代碼

@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.
    if(previousMarker!=null){
        marker2.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.dot_icon));
    }
    marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ct_icon));
    marker2=marker; //Now the clicked marker becomes previousMarker
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM