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.关于坐标 ...
随机推荐
- 【推荐】你必须知道的EF知识和经验
阅读目录 推荐MiniProfiler插件 数据准备 foreach循环的陷进 AutoMapper工具 联表查询统计 性能提升之AsNonUnicode 性能提升之AsNoTracking 多字 ...
- Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10766053 之前用JakeWharton的开源框架ActionBarSherlock ...
- DB-MySQL:MySQL 临时表
ylbtech-DB-MySQL:MySQL 临时表 1.返回顶部 1. MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysq ...
- Java-API-POI:POI百科
ylbtech-Java-API:POI百科 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 1. ...
- SQL语句之transaction
http://blog.csdn.net/xbc1213/article/details/50169935 案例: begin tran --定义一个存储错误新的变量 执行一条语句 set @sumE ...
- MVC 全局异常处理(适用多人操作)
自定义特性: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- POJ 3020 Hungary
一道建图题-- // by SiriusRen #include <cstdio> #include <cstring> using namespace std; #defin ...
- 基于Redis实现分布式应用限流--转
原文地址:https://my.oschina.net/giegie/blog/1525931 摘要: 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限 ...
- Android开发中:小米2S DDMS 不显示
参考:http://bbs.xiaomi.cn/thread-5672159-1-1.html
- Javascript常用字符串判断函数
[代码] 字符串,函数,Javascript,脚本100 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...