public class MyMapView  extends MapView

{

static PopupOverlay pop = null;// 弹出泡泡图层,点击图标使用

private View mScaleView = null;

private int mScaleMaxWidth;

private int mScaleMaxHeight;

private TextView mScaleTextView;

private ImageView mScaleImageView;

public MPCMapLocationMapView(Context context) {

super(context);

if (mScaleView == null) {

initScaleView();

}

}

public MPCMapLocationMapView(Context context, AttributeSet

attrs) {

super(context, attrs);

if (mScaleView == null) {

initScaleView();

}

}

public MPCMapLocationMapView(Context context, AttributeSet

attrs,

int defStyle) {

super(context, attrs, defStyle);

if (mScaleView == null) {

initScaleView();

}

}

private void initScaleView() {

mScaleView = View.inflate(this.getContext(),

R.layout.map_scale, null);

mScaleTextView = (TextView)

mScaleView.findViewById(R.id.scale_text);

mScaleImageView = (ImageView)

mScaleView.findViewById(R.id.scale_image);

regMapViewListener();

refreshScale();

}

public View getScaleView() {

return mScaleView;

}

private void regMapViewListener() {

// TODO Auto-generated method stub

super.regMapViewListener(

MPCCrashHandlerApplication.getInstance().mBMapManager,

new MKMapViewListener() {

@Override

public void onMapMoveFinish() {

// TODO Auto-generated method stub

refreshScale();

}

@Override

public void onMapLoadFinish() {

// TODO Auto-generated method stub

refreshScale();

}

@Override

public void onMapAnimationFinish() {

// TODO Auto-generated method stub

refreshScale();

}

@Override

public void onGetCurrentMap(Bitmap arg0) {

// TODO Auto-generated method stub

}

@Override

public void onClickMapPoi(MapPoi arg0) {

// TODO Auto-generated method stub

}

});

}

@Override

public boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();

switch (action) {

case MotionEvent.ACTION_DOWN:

this.getParent().requestDisallowInterceptTouchEvent(true);

break;

case MotionEvent.ACTION_UP:

this.getParent().requestDisallowInterceptTouchEvent(false);

break;

}

if (mScaleView != null) {

refreshScale();

}

return super.onTouchEvent(event);

}

//计算两处经纬度的实际距离并换算成实际比例尺单位,这个是精华 /

private void refreshScale()

{

// 获取设置默认屏幕宽度480

int default_screen_width =

MPCBrowserUtils.getScreenWidthPixel(this

.getContext());

// 获取设置默认屏幕高度800

int default_screen_height =

MPCBrowserUtils.getScreenHeightPixel(this

.getContext());

// mScaleMaxWidth =

默认屏幕宽度四分之一

mScaleMaxWidth = default_screen_width

>> 2;

// mScaleMaxHeight =

默认屏幕高度二分之一

mScaleMaxHeight =

default_screen_height >> 1;

// 转换为起点的经纬度GeoPoint

GeoPoint fromGeopoint =

getProjection().fromPixels(0, mScaleMaxHeight);

// 转换为终点的经纬度GeoPoint

GeoPoint toGeopoint =

getProjection().fromPixels(mScaleMaxWidth,

mScaleMaxHeight);

//

通过getDistance函数得出两点间的真实距离

double distance =

DistanceUtil.getDistance(fromGeopoint,

toGeopoint);

String discripition =

null;

int dis = 0;

int width = 20;

//

出于百度地图缩放最小为世界地图时,以纸的形式展现,这里强制规定如果zoomlevel=最高级

//

比例尺数值恒定wie:2000公里,黑条宽度恒定为52像素,缩放最大时同样的道理,如果是google

// 地图,不需要if和 else if

if (getZoomLevel() == 19)

{

dis =

MPCMapConstants.SCALE[1];

width = 52;

} else if (getZoomLevel() == 3)

{

dis =

MPCMapConstants.SCALE[17];

width = 80;

} else {

//

真实距离和数组中相近的两个值循环比较,以小值为准,得出规定好的比例尺数值赋值给dis

for (int j = 1; j <

MPCMapConstants.SCALE.length; j++) {

if (MPCMapConstants.SCALE[j - 1]

<= distance

&& distance <

MPCMapConstants.SCALE[j]) {

dis = MPCMapConstants.SCALE[j -

1];

break;

}

}

// 比例尺黑条的宽度

=(dis*默认屏幕宽度四分之一)/真实的距离

width = (int) (dis * mScaleMaxWidth /

distance);

}

// 如果比例尺数值大于1000,则discripition = 2500

km(公里),否则 为 900 m(米)

if (dis >= 1000)

{

discripition = dis /

1000

+

this.getContext().getString(R.string.units_km);

} else {

discripition = dis +

this.getContext().getString(R.string.units_m);

}

//

设置TextView组件要显示的比例尺数值

mScaleTextView.setText(discripition);

//

设置比例尺黑条ImageView的的长度

android.view.ViewGroup.LayoutParams

lp = mScaleImageView

.getLayoutParams();

lp.width = width;

mScaleImageView.setLayoutParams(lp);

}

}

java中比例尺_android 比例尺 源码(二) MyMapView.java相关推荐

  1. java中Mark接口_JVM源码分析之Java对象头实现

    原标题:JVM源码分析之Java对象头实现 原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 "365篇原创计划"第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Ja ...

  2. java中jcl,spring-jcl 日志源码分析

    1.spring-jcl介绍 JCL全称:Jakarta Commons Logging spring-jcl 采用了设计模式中的"适配器模式",它对外提供统一的接口,然后在适配类 ...

  3. java多线程系列:ThreadPoolExecutor源码分析,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  4. java留言板功能齐全源码_各类Java微信开发框架源码对比(建议收藏)

    如果你是一名Java程序猿? 如果你刚接触微信开发? 如果你想要快速开发一款微信公众号/小程序商城? 如果你在寻找一款合适的微信开发框架? 一张图告诉你如何选择! 如果你暂时用不到, 那么收藏备用吧! ...

  5. Java线程池状态判断源码_深入浅出Java线程池:源码篇

    前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...

  6. 【Java】Java中ThreadLocal简介以及源码

    文章目录 1.概述 1.1 什么是ThreadLocal变量 2.API 方法 4.3 ThreadLocalMap 4.1 ThreadLocal 4.1.1 set 4.1.2 get 4.1.2 ...

  7. java 城市公交查询系统源码_基于Java的城市公交查询系统的毕业设计参考源码

    资料介绍 一.实现多种查询功能,包括根据商厦名称.公交车号.日常站点.和任意两个站点查询乘车路线.其次,采用最短路径算法查找任意两个站点之间的最短乘车路线.最后,提供了用户留言的功能.用户管理功能和后 ...

  8. java电商项目源码_电子商务系统+java+web+完整项目+包含源码和数据库Java实用源码...

    本篇我们根据架构图进行代码的构建.根据微服务化设计思想,结合spring cloud一些优秀的项目,如服务发现.治理.配置化管理.路由负载.安全控制等优秀解决方案,使用Maven技术将框架进行模块化. ...

  9. java.util.concurrent.locks.Condition 源码

    2019独角兽企业重金招聘Python工程师标准>>> 相关类图: 使用Condition和 object作为条件队列的区别: object: 只能绑定一个内部队列,使用notify ...

最新文章

  1. 干货 | 国家信息中心杜平谈关于数字化的几点思考
  2. ajax校验的优点,django框架中ajax的使用及避开CSRF 验证的方式详解
  3. 数据结构与算法 / 队列(queue)
  4. 倍增:喷泉 深度解析(洛谷P7167)
  5. MySQL之逻辑架构和存储引擎
  6. FormData提交数据
  7. matplotlib 柱状图 分组_Python数据分析与可视化之matplotlib可视化(三)
  8. 台式电脑一直跳一个计算机页面出来,我的电脑界面上莫名其妙的多出了好几个IE浏览器拜托各位了 3Q...
  9. [转]vs2010 MSDN文档安装方法
  10. 当前读和快照读是什么 区别
  11. ApacheCN 数据科学译文集 20211109 更新
  12. EMW3031下模拟I2C实现
  13. 【HGNN】北邮循序渐进研究HGNN
  14. el tree 双击事件
  15. 到了公司git使用工作流
  16. 详解EBS接口开发之采购订单导入(转载)
  17. 2022年全球市场MEMS惯性测量单元(IMU)总体规模、主要生产商、主要地区、产品和应用细分研究报告
  18. 世界顶级100款XP主题(转)
  19. 【Java】什么是面向对象
  20. git小文件时报错Remote origin does not support the LFS

热门文章

  1. 《每日一套题·提升你我能力》· 第五篇
  2. 基于RWEQ模型的土壤风蚀模数估算及其变化归因分析
  3. Vue 定义全局方法
  4. Java基础8顺序语句判断语句
  5. 怎么将视频配套讲义打印出来
  6. 【python基础】递归函数
  7. 分享]基于Web开发资料专集
  8. IDEMIA被选中提供其下一代指纹匹配引擎,成为英国内政部生物识别计划的一部分
  9. 更改matlab默认工作路径的正确方法!
  10. java pdf库_Java中常用的操作PDF的类库