在地图中访问MyLocation蓝点的可绘制资源

时间:2015-07-07 13:41:08

标签: java android xml google-maps-markers google-maps-android-api-2

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

我拥有的:

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

我使用了map.addCircle来获得下面显示的结果。

What I managed to do

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目录中,但是我找不到获取信息的方法,或者无法访问可绘制列表!< / p>

编辑2:

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

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

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

编辑3 ......:

要完成我之前说的话,这里有一个屏幕截图,显示资源位于Maps drawables中: Screenshot of App's Ressources Application available on PlayStore

这是我的AndroidStudio中可用的drawable列表:

Suggestions in Android Studio

2 个答案:

答案 0 :(得分:2)

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

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

  

轮播

     

标记的旋转顺时针方向为大约   标记的锚点。旋转轴垂直于   标记。旋转0对应于的默认位置   标记。当标记在地图上是平的时,默认位置为   北对齐并且旋转使得标记始终保持   平放在地图上。当标记是广告牌时,默认位置   指向并且旋转使得标记始终是   对着镜头。默认值为0.

你必须注意标记的“锚点”,它必须设置在点的中心,而不是资源的中心(否则它将无法正常工作)。为此,将点放在资源的中心(根据轴承箭头尺寸)或在添加标记时更改锚点:

setAnchor(float anchorU,float 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并在缩放时调整标记大小(这样做很糟糕!)

答案 1 :(得分:0)

我部分同意N.Dorigatti,你是以正确的方式。 没有&#34;无法做到&#34;或者&#34;隐藏的API&#34;。蓝点是位图资源,其大小调整为可接受的大小,并在普通旧标记的(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);

如果我错了,请随意纠正我。 它适用于我的应用程序。 这样,您甚至可以根据需要显示米老鼠。 使用透明环绕的.png。 图像必须是BitmapDescriptor类型。如果我需要Bitmap类型的工作,它可以很容易地从Bitmap转换。