如何在android中的谷歌地图上聚焦标记

2024-05-14

我只是想知道我们是否可以关注 Android 应用程序中添加的标记。如果是,怎么办?或者有没有其他方法可以完成这项任务。

可以说我使用下面的代码添加了一个标记:

map.addMarker(new MarkerOptions()
            .title(title)
            .snippet(snippet)
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
            .position(pos)
                );

如何以最大变焦聚焦在该标记上。如果我再添加 1 个标记,它应该调整缩放(最大可能缩放),以便两个标记都会同时显示。
这就是我正在尝试做的事情,但它失败了map.moveCamera(cu);.

import java.util.ArrayList;
import java.util.List;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.CancelableCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class LocateUserInMap extends FragmentActivity {
    private GoogleMap map;
    private List<Marker> markers;

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

        markers = new ArrayList<Marker>();
        Intent intent = getIntent();
        double frndLatVal = intent.getDoubleExtra("frndLatVal", 0);
        double frndLonVal = intent.getDoubleExtra("frndLonVal", 0);
        LatLng myloc = new LatLng(19.115486500000000000, 72.905544299999970000);
        LatLng friendloc = new LatLng(frndLatVal, frndLonVal);
        map = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.google_map)).getMap();
        addToMap(myloc, "My location", "From here 0M", "blue");
        addToMap(friendloc, "Friend location", "From here 100M", "red");
        showMarkersAtOnce();
    }

    private void showMarkersAtOnce() {
        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        for (Marker m : markers) {
            builder.include(m.getPosition());
        }
        LatLngBounds bounds = builder.build();
        int padding = 0; // offset from edges of the map in pixels
        CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
        map.moveCamera(cu);
    /*  map.getUiSettings().setScrollGesturesEnabled(false);
        map.animateCamera(cu,
                //CameraUpdateFactory.newLatLng(new LatLng(lat, lng))
                 new CancelableCallback()
        {

            @Override
            public void onFinish()
            {
                map.getUiSettings().setScrollGesturesEnabled(true);

            }

            @Override
            public void onCancel()
            {
                map.getUiSettings().setAllGesturesEnabled(true);

            }
        });*/
      //  map.animateCamera(CameraUpdateFactory.zoomBy(13));
    }

    private void addToMap(LatLng pos, String title, String snippet,
            String markercolor) {
        Marker localmarker = null;
        if (markercolor == "blue")
        {
            localmarker = map.addMarker(new MarkerOptions()
                    .title(title)
                    .snippet(snippet)
                    .icon(BitmapDescriptorFactory
                            .defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
                    .position(pos));
        } else if (markercolor == "red") 
        {
            localmarker = map.addMarker(new MarkerOptions()
                    .title(title)
                    .snippet(snippet)
                    .icon(BitmapDescriptorFactory
                            .defaultMarker(BitmapDescriptorFactory.HUE_RED))
                    .position(pos));
        }

        markers.add(localmarker);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.locate_user_in_map, menu);
        return true;
    }

}

和日志猫

08-04 13:23:32.975: W/EGL_emulation(764): eglSurfaceAttrib not implemented
08-04 13:23:42.787: D/dalvikvm(764): GC_CONCURRENT freed 169K, 3% free 11335K/11591K, paused 130ms+40ms, total 336ms
08-04 13:23:49.812: D/dalvikvm(764): GC_CONCURRENT freed 273K, 3% free 11497K/11847K, paused 121ms+124ms, total 480ms
08-04 13:23:49.972: E/ActivityThread(764): Failed to find provider info for com.google.settings
08-04 13:23:50.259: E/ActivityThread(764): Failed to find provider info for com.google.settings
08-04 13:23:54.223: D/dalvikvm(764): GC_CONCURRENT freed 262K, 3% free 11686K/12039K, paused 115ms+110ms, total 396ms

您必须计算所有标记。这样做

LatLngBounds.Builder builder = new LatLngBounds.Builder();
for each (Marker m : markers) {
    builder.include(m.getPosition());
}
LatLngBounds bounds = builder.build();

现在获取CameraUpdateFactory:

int padding = 0; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);

最后将相机移动到标记组上,如下所示:

googleMap.moveCamera(cu);

或者如果你想要动画:

googleMap.animateCamera(cu);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在android中的谷歌地图上聚焦标记 的相关文章

  • Android 应用程序在后台时如何从 firebase-message 获取数据

    我正在使用 firebase console 发送 firebase 消息 这些消息应包含如下所示的附加数据 目的是在我的应用程序的 web 视图中打开特定的 URL 我设置了清单和 firebase 类来获取消息 在我的 firebase
  • 地理编码器返回长度为零的地址

    地理编码器直到今天都工作正常 它开始返回长度为 0 的字符串 注意 这不是 Geocoder 线程的重复 我在启动线程之前使用意图服务和 AsyncTask 来获取它 并且 AsyncTask 方法在 8 个月内工作正常 检查这段代码 ht
  • 使用JACK时生成的proguard mappings.txt文件在哪里?

    我一直在尝试使用最新的JACK 和 JILL 构建系统到我的android项目 我知道JACK进程包括proguard处理 但之后我找不到映射 txt归档回溯堆栈跟踪Google Play 开发者控制台上提供的错误数 请帮我查找映射 txt
  • 64位版本的adb和fastboot?

    我在 Debian 7 3 x64 已完全修补 上发现了以下错误 我很确定这是因为adb即使在其 SDK 工具的 64 位发行版中也是 32 位 which adb opt android sdk platform tools adb op
  • Kotlin Android Studio - Var 在 SDK 29 中被视为 val

    我在 Kotlin 中遇到了一件非常奇怪的事情 我有 var myClipboard getSystemService CLIPBOARD SERVICE as ClipboardManager var myClip ClipData Cl
  • 使用 SharedPreferences 从 ListView 保存数据

    我尝试寻找答案 但找不到我要找的东西 这是我第一次尝试保存数据 使用 SharedPreferences 所以我不太确定我在做什么 要点是 用户在 EditText 中输入内容后 它会填充 ListView 但我也希望这样 当执行此操作时
  • Android studio总是乱码

    I have change the encode to UTF 8 so I got this problem who can help me I reinstalled it twice but android studio1 4 Alw
  • Android:如何检测双击?

    我在实现双击时遇到问题 好吧 我实施了onGestureListener我有gestureDetector 但我不确定问题出在哪里 这是我的代码 public class home extends TabActivity implement
  • 向 Android 操作栏添加按钮

    我如何制作带有文本的按钮 在操作栏中带有图像 如下所示 是否可以使用内置的 android 按钮或图像按钮在操作栏中执行如下操作 我正在使用 appcompat 来使用操作栏 是的 如果需要 您可以膨胀自定义操作栏 Override pro
  • Ctrl 单击 Eclipse 中的类显示二进制/jar 而不是源

    使用Eclipse 版本 Helios 服务版本 2 内部版本号 20110218 0911 与Android插件 我有一个 Android 项目 AndroidUtil 它被标记为我的主要 Android 应用程序的 库 项目 当我按住
  • SpannableString 中的 URLSpan

    我正在使用这个例子SpannableString http developer android com resources samples ApiDemos src com example android apis text Link ht
  • Android - 有没有办法监听 GPS 是否启用或禁用

    我编写此代码是为了接收位置更新 PendingIntent launchIntent PendingIntent getBroadcast context 5000 intent 0 manager requestLocationUpdat
  • 清单合并失败:需要为 显式指定 android:exported

    我的清单文件有问题 错误消息 清单合并失败 android 需要为 明确指定导出 面向 Android 12 及更高版本的应用需要指定显式值android exported当相应的组件定义了意图过滤器时 有关详细信息 请参阅 https d
  • RecyclerView 来自 Firebase 的部分和数据

    您好 我正在开发一个应用程序 在其中我必须使用 Firebase 填充数据回收器视图 准备就绪 现在我想做的是用 data firebase 填写一个 recyclerview 但有一些部分将成为托管 data firebase 的父级 我
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 是否可以从外部闪存驱动器运行 java (jdk-windows)、Eclipse (indigo) 和 Android-sdk 进行 Android 应用程序开发

    我想知道我们是否可以通过在外部闪存驱动器上保存所需的软件来在我们使用的任何计算机上开发我们的android应用程序 我的意思是在闪存驱动器上安装java eclipse和android sdk 所以最后我们可以将闪存带到任何地方计算机并在任
  • 找不到 `activityViewModels()` Hilt Android

    我在我的项目中使用 Hilt 和 MVVM 我想要一个viewModel from activityViewModel在 2 个活动中使用相同的内容 但我的 Android Studio 说未解析的参考 我的应用程序 build gradl
  • Android Studio MediaStore,低于 SDK 29 将图像保存在 SD 卡中失败

    我需要将图像保存在Android 10以下的sd card的图片目录中 我已经实现了范围存储 此代码适用于sdk 29及以上版本 因为MediaStore getExternalVolumeNames是在sdk 29中添加的 sdk 29以
  • 在活动之间共享菜单栏

    我的应用程序上有一个菜单栏 我需要在 5 个活动之间共享该菜单栏 我的菜单栏 5 个允许在活动之间切换的按钮 对于任何活动具有完全相同的 UI 和相同的行为 因此我想共享菜单栏 XML 视图代码和控制器代码 我已经找到了一种使用共享 XML
  • iOS:如何实现像Android的startActivityForResult这样的行为

    我是一名 Android 开发人员 正在开发我们应用程序的 iOS 版本 我需要知道如何在 Android 上实现类似于 startActivityForResult 的行为 我需要显示一个新的视图控制器 然后在新的视图控制器关闭时将控制权

随机推荐

  • 在 Angular 9 应用程序的生产中同时使用 AOT 和 JIT

    因此 我一直在构建一个 Angular 9 应用程序 其中有一个客户仪表板来管理保存在服务器上的模板 这些模板可以通过激活系统在不同的设备上查看 因此设备与用户绑定 所以让我们说https templates com我们有 login da
  • 如何确定异常是否属于特定类型

    我有一段 try catch 代码 try catch Exception ex ModelState AddModelError duplicateInvoiceNumberOrganisation The combination of
  • 在 VBA 中使用 getElementsByClassName

    我正在使用此代码从页面获取产品名称 页面代码是 div class product shop col sm 7 div class product name h1 Claro Glass 1 5 L Rectangular Air Tigh
  • 颠覆和混合修订:破坏构建的秘诀?

    在使用 TFS 一段时间后 我刚刚回到 subversion 一般来说我已经很退出了 有一件事情我记得不一样 我不记得能够从过时的工作副本中提交 或者也许我的记忆力让我无法理解 过时 的定义 我认为 过时 意味着自从我上次更新工作副本以来
  • Chrome 开发工具:无需切换到“源”选项卡即可进入调试器

    如果我把debugger https developer mozilla org en US docs JavaScript Reference Statements debugger当 Chrome 开发工具打开时 我的 JavaScri
  • 如何翻转 Twitter Bootstrap 的工具提示

    我正在使用 Twitter 的 Bootstrap 来实现工具提示 目前 工具提示显示在链接上方 我希望工具提示出现在链接下方 我该怎么做呢 我正在触发工具提示 它明确指出 底部 但它不想为我工作 tooltip tooltip place
  • 我可以使用 Google Analytics 确定用户浏览器对 HTML5 的支持吗?

    Google Analytics 分析 是否能够检测访问浏览器的 HTML5 支持级别 我想知道我的访问者浏览器中有多少百分比支持 HTML5 目前 获取此数据的唯一方法是分析访问者的浏览器统计信息 然后尝试在每个浏览器自己的帮助页面上查找
  • Bokeh 中单独的节点和边缘悬停工具?

    我正在尝试为 Bokeh 中的节点和边缘获取单独的悬停工具提示 但未能使其正常工作 有人可以指出我做错了什么吗 我相信代码应该如下所示 from bokeh io import show output notebook from bokeh
  • 一个类似 dict 的 Python 类

    我想编写一个自定义类 其行为类似于dict 所以 我继承自dict 不过 我的问题是 我是否需要创建一个私有的dict我的成员 init 方法 我不明白这个有什么意义 因为我已经有了dict如果我只是继承自的行为dict 谁能指出为什么大多
  • foreach 循环为 Unity 中的按钮赋值时出现问题

    我正在尝试在 Unity 中为我的游戏制作一个类似 Candy Crush 的地图 我正在尝试将所有按钮收集到一个数组中 然后设置其 onclick 属性 这样当我单击它们时 我就可以达到我想要的级别 我正在使用 Foreach 循环来实现
  • Excel 在“.xls”中发现不可读的内容。同时导出水晶报表到excel

    我正在将数据从 Crystal 报告导出到 PDF 工作正常 并显示所有记录 但是当我将其导出到 Excel 文件中并成功导出时 以及当我在 Excel 中打开它时给出错误消息 文件错误 数据可能已丢失 当我点击 确定 按钮时 在 Exce
  • Yammer API 限制

    Yammer Rest api 文档表示 每个应用程序每个用户在 10 秒内最多可以发出 10 个请求 问题 什么是user这里 是为当前经过身份验证的 yammer 用户发出请求的 IP 地址还是承载令牌 如果我们所有的用户都使用相同的外
  • Audiokit 修剪音频

    我正在制作音频编辑应用程序 我想修剪我的音频 对于音频编辑 我使用 AudioKit 框架 但我在教程和示例中找不到如何使用此框架修剪音频 异步导出允许设置开始和结束样本 https github com AudioKit AudioKit
  • 如何禁用docker容器的root访问权限?

    我们有离岸开发人员 他们希望在本地运行我们的服务器 但出于安全原因 我们不想向他们提供服务器代码 所以一个解决方案是他们运行一个 Docker 容器 这是我们服务器的独立版本 所以他们这边没有复杂的设置 问题在于 始终可以以 root 身份
  • Git 不断提示我输入密码

    我已经使用 Git 一段时间了 但是不断要求输入密码开始让我感到厌烦 我使用的是 Mac OS X 和 GitHub 并且按照 GitHub 的说明设置了 Git 和我的 SSH 密钥设置 Git 页面 http help github c
  • 为什么 *(int*)0=0 不会导致访问冲突?

    出于教育目的 我正在编写一组导致 C 中运行时异常的方法 以了解所有异常是什么以及导致它们的原因 现在 我正在修改程序 导致AccessViolationException 对我来说 最明显的方法是写入受保护的内存位置 如下所示 Syste
  • 使用 Windows 命令行连接文本文件,删除前导行

    我需要连接一些相对较大的文本文件 并且更喜欢通过命令行来完成此操作 不幸的是我只有Windows 无法安装新软件 type file1 txt file2 txt gt out txt 允许我几乎得到我想要的 但我不希望 file2 txt
  • 在 Visual Studio 2013 中更改 TFS 源代码管理映射

    我有多个先前映射到托管 TFS 的解决方案 他们的本地映射也已定义 并且所有源代码都是本地最新的 此后我停止了 TFS 订阅并开始使用 Visualstudio com 作为我的 TFS 服务器 我进入其中一个解决方案 从解决方案中删除 v
  • Django 1.7 应用程序配置导入错误:没有名为 appname.apps 的模块

    我正在尝试按照以下文档为我的一个名为 文章 的 Django 应用程序设置自定义应用程序配置https docs djangoproject com en dev ref applications https docs djangoproj
  • 如何在android中的谷歌地图上聚焦标记

    我只是想知道我们是否可以关注 Android 应用程序中添加的标记 如果是 怎么办 或者有没有其他方法可以完成这项任务 可以说我使用下面的代码添加了一个标记 map addMarker new MarkerOptions title tit