java中比例尺_android 比例尺 源码(二) MyMapView.java
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相关推荐
- java中Mark接口_JVM源码分析之Java对象头实现
原标题:JVM源码分析之Java对象头实现 原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 "365篇原创计划"第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Ja ...
- java中jcl,spring-jcl 日志源码分析
1.spring-jcl介绍 JCL全称:Jakarta Commons Logging spring-jcl 采用了设计模式中的"适配器模式",它对外提供统一的接口,然后在适配类 ...
- java多线程系列:ThreadPoolExecutor源码分析,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- java留言板功能齐全源码_各类Java微信开发框架源码对比(建议收藏)
如果你是一名Java程序猿? 如果你刚接触微信开发? 如果你想要快速开发一款微信公众号/小程序商城? 如果你在寻找一款合适的微信开发框架? 一张图告诉你如何选择! 如果你暂时用不到, 那么收藏备用吧! ...
- Java线程池状态判断源码_深入浅出Java线程池:源码篇
前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...
- 【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 ...
- java 城市公交查询系统源码_基于Java的城市公交查询系统的毕业设计参考源码
资料介绍 一.实现多种查询功能,包括根据商厦名称.公交车号.日常站点.和任意两个站点查询乘车路线.其次,采用最短路径算法查找任意两个站点之间的最短乘车路线.最后,提供了用户留言的功能.用户管理功能和后 ...
- java电商项目源码_电子商务系统+java+web+完整项目+包含源码和数据库Java实用源码...
本篇我们根据架构图进行代码的构建.根据微服务化设计思想,结合spring cloud一些优秀的项目,如服务发现.治理.配置化管理.路由负载.安全控制等优秀解决方案,使用Maven技术将框架进行模块化. ...
- java.util.concurrent.locks.Condition 源码
2019独角兽企业重金招聘Python工程师标准>>> 相关类图: 使用Condition和 object作为条件队列的区别: object: 只能绑定一个内部队列,使用notify ...
最新文章
- 干货 | 国家信息中心杜平谈关于数字化的几点思考
- ajax校验的优点,django框架中ajax的使用及避开CSRF 验证的方式详解
- 数据结构与算法 / 队列(queue)
- 倍增:喷泉 深度解析(洛谷P7167)
- MySQL之逻辑架构和存储引擎
- FormData提交数据
- matplotlib 柱状图 分组_Python数据分析与可视化之matplotlib可视化(三)
- 台式电脑一直跳一个计算机页面出来,我的电脑界面上莫名其妙的多出了好几个IE浏览器拜托各位了 3Q...
- [转]vs2010 MSDN文档安装方法
- 当前读和快照读是什么 区别
- ApacheCN 数据科学译文集 20211109 更新
- EMW3031下模拟I2C实现
- 【HGNN】北邮循序渐进研究HGNN
- el tree 双击事件
- 到了公司git使用工作流
- 详解EBS接口开发之采购订单导入(转载)
- 2022年全球市场MEMS惯性测量单元(IMU)总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 世界顶级100款XP主题(转)
- 【Java】什么是面向对象
- git小文件时报错Remote origin does not support the LFS