自己定义实现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自己定义百度地图缩放图标的更多相关文章

  1. 百度地图点击地图显示地址详情的默认方法怎么关闭,去掉百度地图api图标信息

    去掉百度地图api图标信息 调用百度地图API时,如果想去掉百度的logo,只需要在css里设置: <style> .anchorBL{display:none} </style&g ...

  2. Android Studio使用百度地图示例BaiduMapsApiASDemo

    Android Studio使用百度地图示例BaiduMapsApiASDemo 用自己AVD下的debug.keystore替换掉项目中的debug.keystore 生成自己的签名 同样的方法生成 ...

  3. [置顶] Xamarin android如何调用百度地图入门示例(一)

    在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...

  4. Android中调用百度地图

    一.调用百度地图 --第一种方法 1.下载百度地图SDK SDK可以拆分下载,需要使用那一部分功能就下载相应包含的SDK,如下图 核心的的jar 和so包,放在工程中的libs目录下 2.申请key ...

  5. android 开发(百度地图)

    百度地图开放平台:http://lbsyun.baidu.com/ 百度地图API:http://developer.baidu.com/map/reference/ Android地图SDK 百度地 ...

  6. Android应用之——百度地图最新SDK3.0应用,实现最经常使用的标注覆盖物以及弹出窗覆盖物

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/yanglfree/article/details/33333413 一.概述 最新版的百度地图SDK ...

  7. Android开发基于百度地图的乘车助手

    写在前面: 出去玩免不了挤公交.等地铁,不知道乘车方案当然不行,用官方APP吧,缺点一大堆,手机浏览器在线查的话既慢又麻烦...为了解决这些问题,我们来做一个简版的出行助手,嘛嘛再也不用担心我会迷路了 ...

  8. Android下 使用百度地图sdk

    百度地图 Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持android 1.5以上系统)及以上版本设备的应用程序接口.可以使用该套 SDK开发适用于Android系 ...

  9. 百度地图API图标、文本、图例与连线

    百度地图开放平台功能强大,使用简单,为地图的自定义提供了非常方便的途径! 本文以绘制一张全国机器辐射图为例记录其基本使用方法,效果如下图: 图中包括了带图标和文本的标注,连线以及图例. 1.关于坐标 ...

随机推荐

  1. Unity里包裹Debug,且不影响Debug的重定向

    Debug.Log, Debug.LogWarning, Debug.LogError在project中常常须要再包裹一层.做些定制.也方便开关Log.但有一个问题时.当用一个类将Debug包裹起来后 ...

  2. Android适屏

    总结一下自己的适屏经验,仅仅希望自己不断进步,不断完好,假设有热心肠的"前辈"指导一下,不胜感激! Android5.0已经出来了,说是这个版本号对Android屏幕适配做了非常多 ...

  3. linux下測试硬盘读写速度

    买了个ssd硬盘,就想着跟普通的机械盘做个比較.由于桌面装的是ubuntu系统,所以就想用linux的命令简单測一下好了 以下是ssd的性能数据: 測试写: xxx@WaitFish:~ > t ...

  4. 从C到C++(下)

    继承 从一个类派生到另外一个类,使前者的所有特征在后者中自己主动可用. 他能够声明一些类型,这些类型能够共享部分或所有曾经所声明的类型.它也能够从超过一个的基类中共享一些特性. C++是支持多继承的. ...

  5. How to improve Java&#39;s I/O performance( 提升 java i/o 性能)

    原文:http://www.javaworld.com/article/2077523/build-ci-sdlc/java-tip-26--how-to-improve-java-s-i-o-per ...

  6. UML中的序列图(时序图)

    序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸. 横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时.生命 ...

  7. jQuery Video Extend

    HTML5视频扩展插件 能够加入Logo 加入标记 用法: 下载:jquery-video-extend <script src="js/jquery-2.1.4.min.js&quo ...

  8. Spring容器装饰者模式应用之实现业务类与服务类自由组合的解决方式

    在不论什么一个项目中都不可或缺的存在两种bean,一种是实现系统核心功能的bean,我们称之为业务类,第二种是与系统核心业务无关但同一时候又提供十分重要服务bean,我们称之为服务类.业务类的bean ...

  9. display:block jquery.sort()

    对所有的块元素都没有意义,块元素的dispaly属性默认值为block,没必要再显式定义——除非你之前对块元素的display属性重新定义过.===========================多罗 ...

  10. org/eclipse/jetty/util/component/Container$Listener

    转自:https://blog.csdn.net/husheng8891/article/details/10200965?locationNum=9&fps=1 项目Demo开发的时候,发布 ...