【问题标题】:mMap.getUiSettings().setMapToolbarEnabled(true); is not showing when marker is not clicked [duplicate]mMap.getUiSettings().setMapToolbarEnabled(true);未单击标记时未显示[重复]
【发布时间】:2017-05-30 12:44:05
【问题描述】:

我希望我的地图在不点击标记的情况下显示工具栏。但它总是隐藏,直到我点击标记。请帮我。我尝试了一些从谷歌搜索中获得的方法。但没有任何工作。

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).icon(BitmapDescriptorFactory.defaultMarker()));
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            mMap.getUiSettings().setMapToolbarEnabled(true);
            return false;
        }
    });
    mMap.getUiSettings().setZoomControlsEnabled(true);
    mMap.getUiSettings().setAllGesturesEnabled(false);
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 16));
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 16));
}

布局

<fragment
      android:id="@+id/mapFragment"
      class="com.google.android.gms.maps.SupportMapFragment"
      android:layout_width="match_parent"
      android:layout_height="200dp"/>

编译'com.google.android.gms:play-services-maps:10.2.0'

编译'com.google.android.gms:play-services-location:10.2.0'

【问题讨论】:

  • 你知道如何解决它吗? @KayoLima
  • 我可以给您一个示例,您可以在其中创建带有文本的标记。但是您可能需要自定义文本绘图。如果你愿意,我可以放代码。根据您的要求,它会默认显示值而不点击标记

标签: android google-maps google-maps-api-3


【解决方案1】:

您可以创建一个带有图标的自定义标记并根据您的要求绘制文本。

注意:

但是使用下面的示例,需要根据 您的具体要求

mGoogleMap.addMarker(new MarkerOptions()
          .position(LatLonPosition)
          .icon(BitmapDescriptorFactory
          .fromBitmap(writeTextOnImage(R.drawable.routemarker,"Your text"),this))));

创建可绘制图像的方法

private Bitmap writeTextOnImage(int drawableId, String text,Context context) {
        Bitmap bitmapObj = BitmapFactory.decodeResource(getResources(), drawableId)
                .copy(Bitmap.Config.ARGB_8888, true);
        Typeface tf = Typeface.create("Helvetica", Typeface.BOLD);
        //Create Paint object
        //Define style attributes
        Paint lPaint = new Paint();
        lPaint.setStyle(Paint.Style.FILL);
        lPaint.setColor(Color.WHITE);
        lPaint.setTypeface(tf);
        lPaint.setTextAlign(Paint.Align.CENTER);
        lPaint.setTextSize(convertToPixels(context, 11));
        Rect textRect = new Rect();
        lPaint.getTextBounds(text, 0, text.length(), textRect);
        Canvas lCanvas = new Canvas(bm);
        if(textRect.width() >= (lCanvas.getWidth() - 4))     
        {
            lPaint.setTextSize(convertToPixels(context, 7)); 
        }
        int xPos = (lCanvas.getWidth() / 2) - 2;     
        int yPos = (int) ((lCanvas.getHeight() / 2)) ;
        lCanvas.drawText(text, xPos, yPos, lPaint);
        return  bitmapObj;
    }

以下是输出

【讨论】:

  • 感谢您的回答。我很感激。我会用的。
【解决方案2】:

您无法手动显示,因为单击标记时出现的叠加层是在现场隐式创建和销毁的。

您可以使用 2 ImageView 在地图上创建叠加层,例如:

// Directions
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr=21.5, 0.15&daddr=-49.5, 0.15"));
startActivity(intent);
// Default google map
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?q=loc:51.5, 0.125"));
startActivity(intent);

根据您的标记 getPosition() 和用户的位置更改坐标,并在单击时调用适当的意图

【讨论】:

  • 是我现在的位置,是我现在的位置吗?
  • 是,saddr 为起始地址,daddr 为目标地址
【解决方案3】:

您必须将代码移到 onClick 方法之外,如下所示:

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.getUiSettings().setMapToolbarEnabled(true);
    mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).icon(BitmapDescriptorFactory.defaultMarker()));
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {

            return false;
        }
    });
    mMap.getUiSettings().setZoomControlsEnabled(true);
    mMap.getUiSettings().setAllGesturesEnabled(false);
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 16));
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 16));
}

【讨论】:

  • 还是不行,我还是要点击标记
  • 清理你的项目,代码在onMarkerClick方法之外。单击标记时显示工具栏是没有意义的。
  • 我也清理了项目。还是行不通。没变化。我仍然需要点击它才能让它出现
猜你喜欢
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2020-03-03
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多