Android自己定义百度地图缩放图标
自己定义实现Android百度地图的缩放图标,须要自己定义一个缩放控件,实现效果例如以下:
这里的缩放效果,实现了点击button能够对地图的放大缩小,通过手势放大与缩小也控制缩放图标的可用状态。详细实现例如以下:
首先是drawable文件夹下的两个xml配置文件:
zoom_selector_in.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/zoomin_press"/>
<item android:state_enabled="false" android:drawable="@drawable/zoomin_disable"/>
<item android:drawable="@drawable/zoomin_normal"/>
</selector>
zoom_selector_out.xml
<? xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/zoomout_press"/>
<item android:state_enabled="false" android:drawable="@drawable/zoomout_disable"/>
<item android:drawable="@drawable/zoomout_normal"/>
</selector>
layout中的zoom_controls_in_out.xml布局文件:
<?xml version="1.0" encoding="utf-8"? >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:id="@+id/btn_zoom_in"
android:layout_width="32dp"
android:layout_height="32dp"
android:background="@drawable/zoom_selector_in" /> <Button
android:id="@+id/btn_zoom_out"
android:layout_width="32dp"
android:layout_height="32dp"
android:background="@drawable/zoom_selector_out" /> </LinearLayout>
主配置文件main_activity.xml
<? xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.baidu.mapapi.map.MapView
android:id="@+id/mv_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
<com.example.map.view.ZoomControlsView
android:id="@+id/zcv_zoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"/>
</RelativeLayout>
相关的xml文件都在这里了。以下是详细实现代码:
自己定义缩放控件类ZoomControlsView.java
package com.example.map.view;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.example.map.activity.R; import android.content.Context;
import android.util.AttributeSet;
import android.widget.Button;
import android.widget.LinearLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;; public class ZoomControlsView extends LinearLayout implements OnClickListener{
private Button inBtn;//放大button
private Button outBtn;//缩小button
private BaiduMap baiduMap;//百度地图对象控制器
private MapStatus mapStatus;//百度地图状态
private float minZoomLevel;//地图最小级别
private float maxZoomLevel;//地图最大级别 public ZoomControlsView(Context context, AttributeSet attrs) {
super(context, attrs, 0);
init();
} public ZoomControlsView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
} /**
* 初始化
*/
private void init(){
//获取布局视图
LinearLayout view=(LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.zoom_controls_in_out, null);
//获取放大button
inBtn=(Button) view.findViewById(R.id.btn_zoom_in);
//获取缩小button
outBtn=(Button) view.findViewById(R.id.btn_zoom_out);
//设置点击事件
inBtn.setOnClickListener(this);
outBtn.setOnClickListener(this);
//加入View
addView(view);
} @Override
public void onClick(View v) {
this.mapStatus=this.baiduMap.getMapStatus();//获取地图状态
switch (v.getId()) {
case R.id.btn_zoom_in:
//改变地图状态
this.baiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(mapStatus.zoom+1));
controlZoomShow();//改变缩放button
break;
case R.id.btn_zoom_out:
//改变地图状态
this.baiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(mapStatus.zoom-1));
controlZoomShow();//改变缩放button
break;
default:
break;
}
//又一次获取状态
mapStatus=this.baiduMap.getMapStatus();
} /**
* 设置Map视图
* @param mapView
*/
public void setMapView(MapView mapView){
//获取百度地图控制器
this.baiduMap=mapView.getMap();
//设置地图手势事件
this.baiduMap.setOnMapStatusChangeListener(onMapStatusChangeListener);
//获取百度地图最大最小级别
maxZoomLevel=baiduMap.getMaxZoomLevel();
minZoomLevel=baiduMap.getMinZoomLevel();
controlZoomShow();//改变缩放button
} /**
* 控制缩放图标显示
*/
private void controlZoomShow(){
//获取当前地图状态
float zoom=this.baiduMap.getMapStatus().zoom;
//假设当前状态大于等于地图的最大状态,则放大button则失效
if(zoom>=maxZoomLevel){
inBtn.setBackgroundResource(R.drawable.zoomin_press);
inBtn.setEnabled(false);
}else{
inBtn.setBackgroundResource(R.drawable.zoom_selector_in);
inBtn.setEnabled(true);
} //假设当前状态小于等于地图的最小状态,则缩小button失效
if(zoom<=minZoomLevel){
outBtn.setBackgroundResource(R.drawable.zoomout_press);
outBtn.setEnabled(false);
}else{
outBtn.setBackgroundResource(R.drawable.zoom_selector_out);
outBtn.setEnabled(true);
}
}
/**
* 地图状态改变相关接口实现
*/
BaiduMap.OnMapStatusChangeListener onMapStatusChangeListener=new BaiduMap.OnMapStatusChangeListener() { /**
* 手势操作地图,设置地图状态等操作导致地图状态開始改变。
* @param status 地图状态改变開始时的地图状态
*/
@Override
public void onMapStatusChangeStart(MapStatus arg0) { } /**
* 地图状态变化结束
* @param status 地图状态改变结束时的地图状态
*/
@Override
public void onMapStatusChangeFinish(MapStatus arg0) { } /**
* 地图状态变化中
* @param status 当前地图状态
*/
@Override
public void onMapStatusChange(MapStatus arg0) {
controlZoomShow();
}
}; }
MainActivity.java:
package com.example.map.activity;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;
import com.example.map.view.ZoomControlsView; import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity{
private MapView mvMap;//百度地图控件
private BaiduMap baiduMap;//地图对象控制器
private ZoomControlsView zcvZomm;//缩放控件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//必须在setContentView前
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.main_activity);
initMap();//初始化
} /**
* 初始化地图
*/
private void initMap(){
//获取地图控件
mvMap=(MapView) findViewById(R.id.mv_map);
mvMap.showZoomControls(false);//隐藏缩放控件
//获取地图对象控制器
baiduMap=mvMap.getMap();
baiduMap.setBuildingsEnabled(true);//设置显示楼体
baiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(19f));//设置地图状态 //获取缩放控件
zcvZomm=(ZoomControlsView) findViewById(R.id.zcv_zoom);
zcvZomm.setMapView(mvMap);//设置百度地图控件 } @Override
protected void onPause() {
super.onPause();
mvMap.onPause();
} @Override
protected void onResume() {
super.onResume();
mvMap.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
mvMap.onDestroy();//销毁地图
} }
这样就实现了自己定义的缩放图标了
Android自己定义百度地图缩放图标的更多相关文章
- 百度地图点击地图显示地址详情的默认方法怎么关闭,去掉百度地图api图标信息
去掉百度地图api图标信息 调用百度地图API时,如果想去掉百度的logo,只需要在css里设置: <style> .anchorBL{display:none} </style&g ...
- Android Studio使用百度地图示例BaiduMapsApiASDemo
Android Studio使用百度地图示例BaiduMapsApiASDemo 用自己AVD下的debug.keystore替换掉项目中的debug.keystore 生成自己的签名 同样的方法生成 ...
- [置顶]
Xamarin android如何调用百度地图入门示例(一)
在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...
- Android中调用百度地图
一.调用百度地图 --第一种方法 1.下载百度地图SDK SDK可以拆分下载,需要使用那一部分功能就下载相应包含的SDK,如下图 核心的的jar 和so包,放在工程中的libs目录下 2.申请key ...
- android 开发(百度地图)
百度地图开放平台:http://lbsyun.baidu.com/ 百度地图API:http://developer.baidu.com/map/reference/ Android地图SDK 百度地 ...
- Android应用之——百度地图最新SDK3.0应用,实现最经常使用的标注覆盖物以及弹出窗覆盖物
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/yanglfree/article/details/33333413 一.概述 最新版的百度地图SDK ...
- Android开发基于百度地图的乘车助手
写在前面: 出去玩免不了挤公交.等地铁,不知道乘车方案当然不行,用官方APP吧,缺点一大堆,手机浏览器在线查的话既慢又麻烦...为了解决这些问题,我们来做一个简版的出行助手,嘛嘛再也不用担心我会迷路了 ...
- Android下 使用百度地图sdk
百度地图 Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持android 1.5以上系统)及以上版本设备的应用程序接口.可以使用该套 SDK开发适用于Android系 ...
- 百度地图API图标、文本、图例与连线
百度地图开放平台功能强大,使用简单,为地图的自定义提供了非常方便的途径! 本文以绘制一张全国机器辐射图为例记录其基本使用方法,效果如下图: 图中包括了带图标和文本的标注,连线以及图例. 1.关于坐标 ...
随机推荐
- 洛谷—— P1074 靶形数独
https://www.luogu.org/problem/show?pid=1074 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但 ...
- spring的bean注入扫瞄方法和mybatis的dao bean注入扫描方法
spring的bean注入扫面方法:@ComponentScan(basePackages = "com.pingan.property.icore.pap.*")mybatis的 ...
- java cocurrent包
1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...
- ubuntu14.04无法安装Curl
ubuntu14.04无法安装Curl apt-get install curl 提示没有这个软件 源 更换软件源到163也不行,更新软件源也不行. 解决:參考http://www.linuxidc. ...
- struts2在action中获取request、session、application,并传递数据
假设仅仅是通过request.session.application传递数据,则不须要获取对应的对象也能够传递数据,代码例如以下: ScopeAction.java: package com.ithe ...
- 13. Roman to Integer[E]罗马数字转整数
题目 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...
- 关于spring和extjs对接的过程简述
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- ListView的Item动画
1.效果图 2.需求就是点击item歌曲时,实现一种飞入到预约按钮处的效果 3.思路:在布局文件中加入了一个条目布局,和listView的item一样,点击listView的item时,使用给条目布局 ...
- Oracle自制事务
数据库事务是一种单元操作,要么全部操作成功,要么全部失败.在Oracle中,一个事务是从执行第一个数据操作语言(DML)语句开始的,直到执行一个COMMIT语句,提交保存事务,或执行一个ROLLBAC ...
- JAVA 日期工具类的总结
一般,在项目中,我们会会经常使用到日期的各种方式的处理,在各个业务逻辑操作中,都需要相关的日期操作,因此,实现项目中的日期工具类的提出,还是十分重要的,下面,就项目中常用到的日期的相关操作方式,做了一 ...