【问题标题】:Android Google Maps API v2 - how to change marker iconAndroid Google Maps API v2 - 如何更改标记图标
【发布时间】:2013-08-31 10:39:33
【问题描述】:

我正在尝试更改标记图标。 我从一个服务器目录中获取图像。

当我每次设置断点时,“位”结果都是null。当我运行应用程序时,我得到java.lang.NullPointerException

File file = new File("J:\\!!! DOCUMENTS\\!Outsourcing\\AppStore\\Benzinostancii\\Petrol\\logo.png");

Bitmap bit = BitmapFactory.decodeFile(String.valueOf(file));

double Dlat = lat.get(index);
double Dlon = lon.get(index);
String info = Arrayinfo.get(index);
String name = Arrayname.get(index);

LatLng coordinate = new LatLng(Dlat, Dlon);
map.addMarker(new MarkerOptions()
    .icon(BitmapDescriptorFactory.fromBitmap(bit))
    .position(coordinate)
    .title(info)
).setSnippet(name);

【问题讨论】:

  • J目录是在android设备的内存中吗?为什么不把它放在drawables中?
  • 这个J目录来自PC服务器,我想从这个服务器加载图像。
  • 哦,我认为那不可能。您可能想先从服务器下载图像,然后再使用它。
  • 谢谢你的回答,我试试看。

标签: android google-maps icons google-maps-markers


【解决方案1】:
// latitude and longitude
double latitude = 17.385044;
double longitude = 78.486671;

// create marker
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps");

// Changing marker icon
marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker_icon)));

// adding marker
googleMap.addMarker(marker);

More Info

【讨论】:

  • 我认为你在第 9 车道添加了 )
  • 可能意味着setIcon()
  • 您确定 setIcon 可以在新的 google api 上使用吗?我不这么认为
  • 此解决方案不再有效。
  • 使用googleMap.addMarker(new MarkerOptions().position(new LatLng(35.699262, 51.345184)).title("your_title").icon(bitmapDescriptorFromVector(getApplicationContext(), R.drawable.your_drawable)));
【解决方案2】:

很简单:

new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.icon))

如果您想要位图中的图标

new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap));

【讨论】:

  • 您有新的解决方案吗?提交答案@DanAnderson
  • 好吧,当我评论时我没有。但我想通了,所以我想我可以发布它,以防其他人,比如我,从谷歌搜索中找到这个。
  • 你的图标尺寸是多少?
  • 16 或 32 像素是标记的最佳尺寸...所有屏幕的视图都很好@Arjun
【解决方案3】:

使用.icon() 像这样添加

Marker marker = map.addMarker(new MarkerOptions().position(currentLocation)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_place_holder)));

请注意不要使用矢量图像,如果你想使用矢量使用下面的代码

private BitmapDescriptor bitmapDescriptorFromVector(Context context, @DrawableRes  int vectorDrawableResourceId) {
    Drawable background = ContextCompat.getDrawable(context, R.drawable.ic_map_pin_filled_blue_48dp);
    background.setBounds(0, 0, background.getIntrinsicWidth(), background.getIntrinsicHeight());
    Drawable vectorDrawable = ContextCompat.getDrawable(context, vectorDrawableResourceId);
    vectorDrawable.setBounds(40, 20, vectorDrawable.getIntrinsicWidth() + 40, vectorDrawable.getIntrinsicHeight() + 20);
    Bitmap bitmap = Bitmap.createBitmap(background.getIntrinsicWidth(), background.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    background.draw(canvas);
    vectorDrawable.draw(canvas);
    return BitmapDescriptorFactory.fromBitmap(bitmap);
}

【讨论】:

    【解决方案4】:

    在较新版本的 Android 版 GoogleMaps 中,您不能在 MarkerOptions 对象上调用 .setIcon()。相反,您必须将标记选项添加到地图中,这将为您提供Marker,然后您可以在其上更改图标。

    在 Kotlin 中,代码如下所示:

    val markerOptions = MarkerOptions()
    markerOptions.position(LatLng(40.419900, -111.880767))
    val marker: Marker?  = googleMap?.addMarker(markerOptions)
    val bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_customer_symbol)
    marker?.setIcon(bitmapDescriptor)
    

    【讨论】:

      【解决方案5】:

      对于 Xamarin C# 用户:

      tappedMarker.Remove();
      MarkerOptions markerOptions = new MarkerOptions();
      markerOptions.SetTitle(tappedMarker.Title);
      markerOptions.SetPosition(tappedMarker.Position);
      
      markerOptions.SetIcon(BitmapDescriptorFactory.DefaultMarker(BitmapDescriptorFactory.HueGreen));
      tappedMarker = googleMap.AddMarker(markerOptions);
      

      【讨论】:

      • 方法名称从不以大写字母开头。而且这些方法都不存在。
      • @Dennis 很好,它在 C# 上可以,但这是 Xamarin 版本,只需将相同的代码转换为 java,相同的命名法
      • 好的,但是这些方法不存在。
      • @Dennis,是的,它们确实存在。 Gustavo 正在谈论 c# Xamarin。这就是你必须在 C# 中处理的方式。
      • 哦,但是我们这里说的是android -> JAVA,他不应该以任何其他格式给出答案吧?
      【解决方案6】:

      在“onMapReady(GoogleMap googleMap)”里面

      MarkerOptions marker = new MarkerOptions();
      marker.icon(BitmapDescriptorFactory.fromResource(R.drawable._icon));
      

      【讨论】:

      • 你是说setIcon?
      【解决方案7】:

      试试这个,

        BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.location);
                  LatLng bangalore = new LatLng(12.9716, 77.5946);
      
       MarkerOptions markerOptions = new MarkerOptions().position(bangalore)
                .title("Current Location")
                  .snippet("hello").icon(icon);
      
      
       mMap.addMarker(markerOptions);
      

      【讨论】:

      • 它不适用于可绘制对象中存在的 xml 文件。使用 png 获取结果
      【解决方案8】:
            mMap = googleMap;
       LatLng sydney = new LatLng(Lat,Lng);
             mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney").icon(BitmapDescriptorFactory.fromResource(R.drawable.icon)));
       mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney,12.0f));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-22
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        相关资源
        最近更新 更多