当前位置: 首页 > news >正文

MapBox Android版开发 6 关于Logo

MapBox Android版开发 6 关于Logo

  • Logo的显示
  • 查看源码及思路(Logo)
    • 第一步
    • 第二步
  • 隐藏Logo示例
  • 查看源码及思路(Info)
    • 第一步
    • 第二步
  • 隐藏Logo和Info示例

看到有网友留言问如何移除Logo,今天看了下V9源码,发现MapBox 提供了禁用Logo的功能。

先简单说下思路部分源码,最后是示例。

Logo的显示

MapBox通过MapView展示地图和地图上的要素,地图上的要素也是MapView的一部分。要隐藏其中一个元素,最先要考虑要素渲染的方式。

  1. 通过Android控件叠在地图上。
  2. 借助覆盖物接口渲染。
  3. 在底层与地图一起渲染。

三种可能的显示方式,对应隐藏的难易程度也不通,隐藏方式也不同。

查看源码及思路(Logo)

第一步

接下来要确认MapBox是如何显示Logo的。先看MapView的源码。

步骤1:在MapView中可以很快找到方法MapView.initialiseLogoViewLogo是通过ImageView显示在地图上的。

protected ImageView initialiseLogoView() {ImageView logoView = new ImageView(this.getContext());addView(logoView);logoView.setTag("logoView");logoView.getLayoutParams().width = LayoutParams.WRAP_CONTENT;logoView.getLayoutParams().height = LayoutParams.WRAP_CONTENT;logoView.setImageDrawable(BitmapUtils.getDrawableFromRes(getContext(), R.drawable.mapbox_logo_icon));return logoView;
}

步骤2:查看MapView.initialiseLogoView 调用,在UiSettings.initialiseLogo方法中创建了Logo视图。

private void initialiseLogo(MapboxMapOptions options, @NonNull Resources resources) {isLogoInitialized = true;logoView = mapView.initialiseLogoView();setLogoEnabled(options.getLogoEnabled());setLogoGravity(options.getLogoGravity());setLogoMargins(resources, options.getLogoMargins());
}

步骤3UiSettingsLogo相关的属性和接口,这其中就包含隐藏Logo的方法UiSettings.setLogoEnabled

ImageView logoView;
boolean isLogoInitialized = false;private void initialiseLogo(MapboxMapOptions options, @NonNull Resources resources);
private void setLogoMargins(@NonNull Resources resources, @Nullable int[] logoMargins);
private void saveLogo(Bundle outState);
private void restoreLogo(Bundle savedInstanceState);
// Enables or disables the Mapbox logo.
public void setLogoEnabled(boolean enabled);
public boolean isLogoEnabled();
public void setLogoGravity(int gravity);
public int getLogoGravity();
public void setLogoMargins(@Px int left, @Px int top, @Px int right, @Px int bottom);
public int getLogoMarginLeft();
public int getLogoMarginTop();
public int getLogoMarginRight();
public int getLogoMarginBottom();

第二步

接下来的问题是,如何获取UiSettings对象?MapboxMap提供了方法。

UiSettingsMapboxMap部分类图:

UiSettings
+void setLogoEnabled(boolean enabled)
MapboxMap
-UiSettings uiSettings
+UiSettings getUiSettings()

隐藏Logo示例

在地图初始化成功后,通过MapboxMapUiSettings对象,隐藏Logo

mapView.getMapAsync(new OnMapReadyCallback() {@Overridepublic void onMapReady(@NonNull MapboxMap mapboxMap) {// 隐藏Logo mapboxMap.getUiSettings().setLogoEnabled(false);mapStyle = new MapStyle(mapboxMap);mapStyle.changeStyle(Style.MAPBOX_STREETS);}
});

运行效果图如下。

运行后发现在原本Logo的右侧还有一个 ,参考隐藏Logo的思路,接下来通过源码找隐藏 Info 的方法。

在这里插入图片描述

查看源码及思路(Info)

第一步

步骤1:在MapView初始化Logo代码中,Logo资源为R.drawable.mapbox_logo_icon,接下来找info对应的资源。

protected ImageView initialiseLogoView() {ImageView logoView = new ImageView(this.getContext());addView(logoView);logoView.setTag("logoView");logoView.getLayoutParams().width = LayoutParams.WRAP_CONTENT;logoView.getLayoutParams().height = LayoutParams.WRAP_CONTENT;logoView.setImageDrawable(BitmapUtils.getDrawableFromRes(getContext(), R.drawable.mapbox_logo_icon));return logoView;
}

步骤2MapBoxdrawable不多,能很快找到logoinfo的资源。

mapbox_logo_icon.png
mapbox_info_icon_default.png
mapbox_info_icon_selected.png
mapbox_info_bg_selector

步骤3MapView.initialiseAttributionView使用了info资源。

protected ImageView initialiseAttributionView() {ImageView attrView = new ImageView(this.getContext());addView(attrView);attrView.setTag("attrView");attrView.getLayoutParams().width = LayoutParams.WRAP_CONTENT;attrView.getLayoutParams().height = LayoutParams.WRAP_CONTENT;attrView.setAdjustViewBounds(true);attrView.setClickable(true);attrView.setFocusable(true);attrView.setContentDescription(getResources().getString(R.string.mapbox_attributionsIconContentDescription));attrView.setImageDrawable(BitmapUtils.getDrawableFromRes(getContext(), R.drawable.mapbox_info_bg_selector));// inject widgets with MapboxMapattrView.setOnClickListener(attributionClickListener = new AttributionClickListener(getContext(), mapboxMap));return attrView;
}

步骤4:查看MapView.initialiseAttributionView 调用,在UiSettings.initialiseAttribution方法中创建了Info视图。

private void initialiseAttribution(@NonNull Context context, MapboxMapOptions options) {isAttributionInitialized = true;attributionsView = mapView.initialiseAttributionView();setAttributionEnabled(options.getAttributionEnabled());setAttributionGravity(options.getAttributionGravity());setAttributionMargins(context, options.getAttributionMargins());int attributionTintColor = options.getAttributionTintColor();setAttributionTintColor(attributionTintColor != -1? attributionTintColor : ColorUtils.getPrimaryColor(context));
}

步骤3UiSettingsAttribution相关的属性和接口,这其中就包含隐藏Info的方法UiSettings.setAttributionEnabled

ImageView attributionsView;
private final int[] attributionsMargins = new int[4];
private AttributionDialogManager attributionDialogManager;
boolean isAttributionInitialized = false;private void initialiseAttribution(@NonNull Context context, MapboxMapOptions options);
private void setAttributionMargins(@NonNull Context context, @Nullable int[] attributionMargins);
private void saveAttribution(Bundle outState);
private void restoreAttribution(Bundle savedInstanceState);
// Enables or disables the attribution.
public void setAttributionEnabled(boolean enabled);
public boolean isAttributionEnabled();
public void setAttributionDialogManager(@NonNull AttributionDialogManager attributionDialogManager);
public AttributionDialogManager getAttributionDialogManager();
public void setAttributionGravity(int gravity);
public int getAttributionGravity();
public void setAttributionMargins(@Px int left, @Px int top, @Px int right, @Px int bottom);
public void setAttributionTintColor(@ColorInt int tintColor);
public int getAttributionMarginLeft();
public int getAttributionMarginTop();
public int getAttributionMarginBottom();

第二步

UiSettingsMapboxMap部分类图:

UiSettings
+void setLogoEnabled(boolean enabled)
+void setAttributionEnabled(boolean enabled)
MapboxMap
-UiSettings uiSettings
+UiSettings getUiSettings()

隐藏Logo和Info示例

在地图初始化成功后,通过MapboxMapUiSettings对象,隐藏LogoInfo

mapView.getMapAsync(new OnMapReadyCallback() {@Overridepublic void onMapReady(@NonNull MapboxMap mapboxMap) {// 隐藏Logo和InfomapboxMap.getUiSettings().setLogoEnabled(false);mapboxMap.getUiSettings().setAttributionEnabled(false);mapStyle = new MapStyle(mapboxMap);mapStyle.changeStyle(Style.MAPBOX_STREETS);}
});

运行效果图

在这里插入图片描述

相关文章:

MapBox Android版开发 6 关于Logo

MapBox Android版开发 6 关于Logo Logo的显示查看源码及思路(Logo)第一步第二步 隐藏Logo示例查看源码及思路(Info)第一步第二步 隐藏Logo和Info示例 看到有网友留言问如何移除Logo,今天看了下V9源码,发现M…...

2024年房市

24年8月15日,国家统计局公布,“7月末,商品房待售面积73926万平方米”。(原文链接:https://www.stats.gov.cn/sj/zxfb/202408/t20240815_1955982.html)   7.39亿平方存量商品房,估价均价1万每平,总价约&am…...

index索引

index索引: create index 【1】on 【2】(【3】) 1为索引名,通常为id_表名_列名。2为表名。3为列名。 CREATE INDEX id_account_id ON account(id); -- 根据id创建索引 CREATE INDEX id_account_idname on account(id,name); -- 创建组合索引 索…...

理解互联网链路:从本地ISP到Tier 1 ISP运营商

1. 互联网服务提供商(ISP) 互联网服务提供商(ISP)是指提供互联网接入服务的公司或组织。它们负责将用户连接到互联网,并提供相关的服务,如电子邮件、网站托管和其他在线服务。ISP可以分为不同的层级&#…...

基于元神操作系统实现NTFS文件操作(三)

1. 背景 本文主要介绍DBR的读取和解析,并提供了基于元神操作系统的实现代码。由于解析DBR的目的是定位到NTFS磁盘分区的元文件$Root进行文件操作,所以只解析了少量的部分,其它部分可以参考相关文档进行理解。 DBR存在于磁盘分区的第一个扇区…...

深度学习与数学归纳法

最近发现,深度学习可以分为两个主要的阶段,分别是前向推理以及反向传播,分别对应着网络的推理和参数训练两个步骤。其中推理有时候也称为归纳推理。 在做参数训练的时候,本质上是在利用历史数据求网络参数的先验分布; …...

《Linux从小白到高手》理论篇(六):Linux软件安装一篇通

List item 本篇介绍Linux软件安装相关的操作命令,看完本文,有关Linux软件安装相关操作的常用命令你就掌握了99%了。 Linux软件安装 RPM RPM软件的安装、删除、更新只有root权限才能使用;查询功能任何用户都可以操作;如果普通用…...

【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错

1. 运行项目 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Appl…...

②EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器

EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器https://item.taobao.com/item.htm?ftt&id798036415719 EtherCAT 串口网关 EtherCAT 转 RS485 (接上一章) 自由协议通信步骤 (以MS-A2-1041为例) 接收与…...

matlab-对比两张图片的HSV分量的差值并形成直方图

%对比两张图片的HSV分量的差值并形成直方图,改个路径就能用,图片分辨率要一致 close all; clear all; clc; I1imread(E:\test\resources\image\1.jpg); I2imread(E:\test\resources\image\2.jpg); HSV1 rgb2ntsc(I1); HSV2 rgb2ntsc(I2); %HSV,HSV 代…...

微服务SpringGateway解析部署使用全流程

官网地址: Spring Cloud Gateway 目录 1、SpringGateway简介 1、什么是网关 2、为什么用网关【为了转发】 2、应用: 1.启动nacos 2.创建网关项目 3.网关配置1 4.网关配置2【了解】 5.过滤器配置【了解】 1、SpringGateway简介 核心功能有三个&…...

Solidity 存储和内存管理:深入理解与高效优化

在 Solidity 中,存储和内存管理是编写高效智能合约的关键组成部分。合约执行的每一步操作都可能涉及到数据的存储和读取,而这些操作对 gas 的消耗有很大影响。因此,理解 Solidity 的存储模型以及如何优化数据的管理对于合约的安全性、性能和成…...

机器学习篇-day02-KNN算法实现鸢尾花模型和手写数字识别模型

一. KNN简介 KNN思想 K-近邻算法(K Nearest Neighbor,简称KNN)。比如:根据你的“邻居”来推断出你的类别 KNN算法思想:如果一个样本在特征空间中的k 个最相似的样本中的大多数属于某一个类别,则该样本也属…...

【C++】STL--vector

1.vector的介绍 我们先来看看vector的文档介绍,实际中我们只要熟悉相关接口就好了。 成员函数 使用STL的三个境界:能用,明理,能扩展 ,那么下面学习vector,我们也是按照这个方法去学习 2 vector的使用 v…...

Java使用Redis的详细教程

Redis是一个基于内存的key-value结构数据库,即非关系型数据库,具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中,Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。以下是在Java中使用Redis的详细教…...

严重 Zimbra RCE 漏洞遭大规模利用(CVE-2024-45519)

攻击者正在积极利用 CVE-2024-45519,这是一个严重的 Zimbra 漏洞,该漏洞允许他们在易受攻击的安装上执行任意命令。 Proofpoint 的威胁研究人员表示,攻击始于 9 月 28 日,几周前,Zimbra 开发人员发布了针对 CVE-2024-…...

php函数积累

对称函数 isset 判断数组arr中是否存在键key 返回值true/false isset(name,$arr) unset 删除数组中的键 需存在key不然抛出异常 unset($arr[name]) json_encode 数据转json格式 json_encode($arr) 一般形式 指定字符编码形式 json_decode json格式转原有数据格式 json_d…...

前端项目场景相关的面试题,包含验证码、图片存储、登录鉴权、动态路由、组件划分等项目场景实际的面试题

项目场景面试题 如何防止短信验证码被刷 问题场景 添加倒计时和图片滑动验证,避免不必要的资源浪费 发送短信验证码需要费用发送短信消耗服务器资源 公司的图片、视频、文件资源如何存储的 传统模式 分开存储到数据服务器,托管服务器到云端 缺点&…...

uniapp 上了原生的 echarts 图表插件了 兼容性还行

插件地址:echarts - DCloud 插件市场 兼容性这块儿不知道后期会不会支持其他浏览器 H5 的话建议可以用原生的不用这个插件...

共享单车轨迹数据分析:以厦门市共享单车数据为例(八)

副标题:基于POI数据的站点综合评价——以厦门市为例(三) 什么是优劣解距离法(TOPSIS)? 优劣解距离法(Technique for Order Preference by Similarity to Ideal Solution,简称TOPSI…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异&#xff…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...