调用标记图标

时间:2015-06-27 20:45:59

标签: java android google-maps

我想检查我的谷歌地图标记是否有这样的图像资源:

if (marker.getIcon() == BitmapDescriptorFactory.fromResource(R.drawable.imagefile)) {
}

但是marker.getIcon不起作用,那么如何调用标记的图标?

2 个答案:

答案 0 :(得分:0)

你无法获得图标,并且等于无论如何都不会有效(如果你从BitmapDescriptorFactory获得它不是同一个对象。

无论如何,您可以尝试将String ID用于标记而不是图标

答案 1 :(得分:0)

您可以使用HashMap存储添加到地图的每个标记的Icon类型。

我刚刚得到了一个简单的例子,使用HashMap将Marker ID映射到当前为Marker设置的Icon的颜色。

如果您使用的是自定义Drawable,则可以使用HashMap<String, Integer>代替HashMap<String, Float>,就像我在这个简单示例中所做的那样。

如果更改标记图标颜色或Drawable资源,您还应该更新HashMap。

班级代码:

public class MainActivity extends AppCompatActivity {

    HashMap<String, Float> markerIcons = new HashMap<>();

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setUpMapIfNeeded();
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
            }
        }
    }

    private void setUpMap() {

        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

            Float markerColor;
            @Override
            public boolean onMarkerClick(Marker marker) {
                markerColor = markerIcons.get(marker.getId());
                if (markerColor == BitmapDescriptorFactory.HUE_MAGENTA){
                    Toast.makeText(MainActivity.this, "HUE_MAGENTA", Toast.LENGTH_LONG ).show();
                }
                else if (markerColor == BitmapDescriptorFactory.HUE_AZURE){
                    Toast.makeText(MainActivity.this, "HUE_AZURE", Toast.LENGTH_LONG ).show();
                }
                else if (markerColor == BitmapDescriptorFactory.HUE_CYAN){
                    Toast.makeText(MainActivity.this, "HUE_CYAN", Toast.LENGTH_LONG ).show();
                }


                return false;
            }

        });
        Marker marker = null;
        marker = mMap.addMarker(new MarkerOptions().position(new LatLng(2, 2)).title("Marker Magenta").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));
        markerIcons.put(marker.getId(), BitmapDescriptorFactory.HUE_MAGENTA);

        marker = mMap.addMarker(new MarkerOptions().position(new LatLng(3, 3)).title("Marker Azure").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
        markerIcons.put(marker.getId(), BitmapDescriptorFactory.HUE_AZURE);

        marker = mMap.addMarker(new MarkerOptions().position(new LatLng(4, 4)).title("Marker Cyan").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
        markerIcons.put(marker.getId(), BitmapDescriptorFactory.HUE_CYAN);

    }
}

点击每个标记后的结果:

enter image description here

enter image description here

enter image description here