访问Maps中MyLocation蓝点的drawable资源

Access the drawable resource of MyLocation blue dot in Maps

我想获得与指示您在地图上的位置和方位(蓝色)的圆圈相同的纹理,以便添加具有相同纹理和行为的其他圆圈(红色) =60=].

我有:

我可以访问有关红点的所有参数:LatLng, Bearing...

我使用 map.addCircle 得到下面显示的结果。

map.addCircle(new CircleOptions()
            .center(position1)
            .fillColor(Color.RED)
            .strokeColor(Color.WHITE)
            .radius(1.2)
            .strokeWidth(1 / 4));

需要:

我需要圆 独立于倾斜和缩放,即它的大小适应缩放级别并且 它的行为就像蓝圈.

显示方位是必不可少的。

有精度指示(大圆可选)

编辑 1:

我认为这个蓝点可能在 com.google.android.gms.maps.R.drawable 目录中,但 我找不到获取信息或访问可绘制对象列表的方法 !

编辑 2:

使用 Apps Ressources(在 PlayStore 上可用,我发现地图的可绘制文件夹中存在 blue_dot。所以我尝试了:

.icon(BitmapDescriptorFactory.fromResource(com.google.android.gms.maps.R.drawable.blue_dot)

但是我得到一个无法解析符号...有什么想法吗?

编辑 3...:

为了完成我之前所说的内容,下面是一张显示资源位于地图可绘制对象中的屏幕截图:

这是我的 AndroidStudio 中似乎可用的可绘制对象列表:

您无法访问蓝点资源,因为它不是 public。无论如何,它是一个蓝点,轴承部分作为资源的一部分添加。 我们不知道如何创建它(没有解释或源代码),但您可以尝试通过以下方式复制它:

创建一个资源,它是一个点(根据需要为蓝色或红色),上面有“轴承”指示器(与标准的一样),然后将 'arrow' 指向资源的中心部分。 将其作为标记资源,将其设置为平面( setFlat(boolean flat) )并根据您想要的方位更改旋转;来自文档:

Rotation

The rotation of the marker in degrees clockwise about the marker's anchor point. The axis of rotation is perpendicular to the marker. A rotation of 0 corresponds to the default position of the marker. When the marker is flat on the map, the default position is North aligned and the rotation is such that the marker always remains flat on the map. When the marker is a billboard, the default position is pointing up and the rotation is such that the marker is always facing the camera. The default value is 0.

你要注意marker的“锚点”,一定要设置在点的中心,而不是资源的中心(否则无法正常工作)。为了做到这一点,将点放在资源的中心(根据方位箭头尺寸)或在添加标记时更改锚点:

setAnchor(浮动anchorU,浮动anchorV)

文档是 https://developers.google.com/android/reference/com/google/android/gms/maps/model/Marker#setAnchor(float, float)

资源中的圆点更容易居中,但资源会更大

关于发光 这是“更糟糕”的做法,因为您不能以与他们相同的方式绘制它(同样,我假设他们没有使用标准 API,我不知道)。 您可以添加一个中心与标记相同的圆形,并使用颜色和圆尺寸进行一些调整:

// Instantiates a new CircleOptions object and defines the center and radius
CircleOptions circleOptions = new CircleOptions()
    .center(new LatLng(POS_LAT, POS_LNG))
    .radius(30) // radius in meters
    .fillColor(0x8800CCFF) //this is a half transparent blue, change "88" for the transparency
    .strokeColor(Color.BLUE) //The stroke (border) is blue
    .strokeWidth(2)); // The width is in pixel, so try it!

// Get back the mutable Circle
Circle circle = myMap.addCircle(circleOptions);

我唯一不能帮助的是缩小时点的尺寸。不幸的是,gmaps 会自动调整它的大小,所以为了保持它的小,你必须使用 GoogleMap.OnCameraChangeListener 并在缩放时调整标记的大小(这是一个很好的方法!)

我部分同意 N.Dorigatti,你说得对。 没有 "can't do" 或 "hidden API" 这样的东西。蓝点是一种位图资源,其大小已调整为可接受的大小,并在普通旧标记的 (0.5f,0.5f) 处提供了一个锚点。与圆形不同,它在整个缩放过程​​中保持恒定大小。

    BitmapDescriptor blueDot = BitmapDescriptorFactory.fromResource(R.drawable.your_blue_dot);
MarkerOptions mo = new MarkerOptions()
             .position(new LatLng(yourLatitude, yourLongitude))
             .title("dot example")
             .snippet("seriously")
             .icon(blueDot)
             .anchor(0.5f, 0.5f);
yourMap.addMarker(mo);

如果我错了,请随时纠正我。 不过,它对我的​​应用程序非常有用。 这样,如果需要,您甚至可以显示 Mickey-Mouse。 使用带有透明环绕的 .png。 图像必须是 BitmapDescriptor 类型。如果需要 Bitmap-type 工作,它可以很容易地从位图转换。