百度地图API制作自定义的放大缩小控件ZoomControlView

接着上一篇:上一篇博客讲的是用百度地图的API制作 Marker 和 自定义的弹出框,这一篇则是讲对于百度地图的放大缩小控制:

老规矩先来张截图:

接下来一大波代码来袭。。。

package com.jsbtclient.cusViews;

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.jsbtclient.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class ZoomControlView extends LinearLayout implements View.OnClickListener{

	private MapView mapView;

	private BaiduMap baiduMap;//百度地图对象控制器

	private MapStatus mapStatus;//百度地图状态

	private ImageView zoomOut, zoomIn;

	private float MaxLevel;

	private float MinLevel;

	public ZoomControlView(Context context) {
		super(context);
		initZoomControlView(context);
	}

	public ZoomControlView(Context context, AttributeSet attr) {
		super(context, attr);
		initZoomControlView(context);
	}

	private void initZoomControlView(Context context) {
		LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		View view = inflater.inflate(R.layout.zoom_control_layout, this);
		zoomIn = (ImageView) view.findViewById(R.id.zoom_control_plus);
		zoomOut = (ImageView) view.findViewById(R.id.zoom_control_reduce);
		zoomIn.setOnClickListener(this);
		zoomOut.setOnClickListener(this);
	}

	/**
	 * set {@link MapView}
	 */
	public void setMapView(MapView mapView)
	{
		if(mapView != null)
		{
			this.mapView = mapView;
			baiduMap = mapView.getMap();
			mapStatus = baiduMap.getMapStatus();
			MaxLevel = baiduMap.getMaxZoomLevel();
			MinLevel = baiduMap.getMinZoomLevel();
		}else{
			throw new NullPointerException("you should call setMapView(MapView mapView) at first");
		}
	}

	@Override
	public void onClick(View view) {

		switch (view.getId()) {
		case R.id.zoom_control_plus:
			baiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());//放大
			break;
		case R.id.zoom_control_reduce:
			baiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());//缩小

			break;
		default:
			break;
		}
		mapStatus = mapView.getMap().getMapStatus();
		refreshZoomControlView();
	}

	private void refreshZoomControlView() {

		float zoom = mapStatus.zoom;

		if(zoom> MinLevel && zoom< MaxLevel)
		{

			if(!zoomIn.isEnabled()){
				zoomIn.setEnabled(true); //设置为可点击
			}

			if(!zoomOut.isEnabled()){
				zoomOut.setEnabled(true);
			}

		}else if(zoom == MinLevel)
		{
			zoomOut.setEnabled(false);
			zoomIn.setEnabled(true);

		}else
		{

			zoomIn.setEnabled(false);
			zoomOut.setEnabled(true);
		}
	}

}

zoom_control_layout.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" >

    <ImageView
        android:id="@+id/zoom_control_plus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_weight="1"
        android:contentDescription="@string/app_name"
        android:src="@drawable/zoomin_selector" />

    <ImageView
        android:id="@+id/zoom_control_reduce"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_weight="1"
        android:contentDescription="@string/app_name"
        android:src="@drawable/zoomout_selector" />

</LinearLayout>

zoomin_selector.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_pressed"></item>
    <item android:state_enabled="false" android:drawable="@drawable/zoomin_pressed"></item>
    <item android:drawable="@drawable/zoomin_normal"></item>
</selector>

zoomout_selector.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_pressed"></item>
    <item android:state_enabled="false" android:drawable="@drawable/zoomout_pressed"></item>
    <item android:drawable="@drawable/zoomout_normal"></item>
</selector>

代码很容易理解,大家自己看吧,用的话这样就可以

zoomControlView = (ZoomControlView) view.findViewById(R.id.map_zoomcontrol);
		zoomControlView.setMapView(mapView);
		mapView.showZoomControls(false);//隐藏原生的控制按钮
时间: 2024-09-29 22:58:37

百度地图API制作自定义的放大缩小控件ZoomControlView的相关文章

百度地图API制作类似 百度地图的路线导航界面并实现简单的路线规划功能

之前我们讲了怎么在百度地图上设置Marker(如A点..) 和弹出框(跟随Marker的,Marker移动的时候也是会跟着移动的),接着又觉得百度地图自带的放大缩小不(fei)是(chang)很(de)漂(chou)亮,我们自定义了放大缩小的控件,本篇我们将制作类似百度地图API制作类似百度地图的公交/驾车/行走/查询界面并实现简单的路线规划功能. 先来张截图:   这个界面的实现其实是使用的SlidingUpPanelLayout 开源库从而使得可以跟随手指下拉上划: 其实布局也没什么好讲的,

使用百度地图API制作线路轨迹播放

1.使用百度地图API制作轨迹播放: 可应用于车辆跟踪.行驶线路回放.跑步行程的记录等地图应用场景, 1.1绘制静态轨迹图 获取多个轨迹点point(必须包含经度.纬度) 使用polyline对象依次连接相邻的2个点(注意polyline的个数比point的少1) 1.2绘制动态轨迹图(固定间隔时间) 每隔500毫秒读取一个轨迹点,实现a,b两个功能 a增加一条polyline b将marker从先前的point移到当前点 主方法使用setTimeout方法迭代来实现动态循环 Polyline在

【百度地图API】自定义可编辑的交通路线

原文:[百度地图API]自定义可编辑的交通路线 任务描述: 我想自己绘制一条从地铁站出口到天安门的道路,而且还需要根据我的喜好来改变这条路线. 如何实现: 鼠标左击地图,绘制路线:双击后,绘制结束:绘制结束后,路线可编辑. TIPS: API1.1以后,可以使用enableEditing()来开启折线可编辑功能. 图示: 运行代码,请点击这里. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &

借助百度地图API制作企业百度地图

做网站需要插入地图,可以借助百度地图API,具体步骤如下: 1.打开百度地图API的网址:   http://api.map.baidu.com/lbsapi/creatmap/ 2.设置中心点 3.添加标注 4.点击下面的获取代码,复制出代码即可 5.复制的代码图标地址有问题,可以用这个地址的图标 http://map.baidu.com/image/us_mk_icon.png 6.自己测试源代码可供参考 <!DOCTYPE html> <html lang="en&quo

百度地图API —— 制作多途经点的线路导航

[百度地图API]如何制作多途经点的线路导航--驾车篇 摘要: 休假结束,酸奶小妹要从重庆驾车去北京.可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ------------------------------------------------------------------------------------------------------------------------ 一.创建地图 首先要告诉大家的是,API1.2版本取消密钥,取消服务设置,

百度地图API使用介绍

百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html> 2. <head> 3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4. <title>Hello, World</title> 5. <sc

【百度地图API】如何激发手机的高分辨率

原文:[百度地图API]如何激发手机的高分辨率 摘要:不少用户使用百度地图API开发在移动浏览器上的应用时发现,明明自己的手机是高分辨率的,但是显示出来的地图却比较模糊,甚至“看不清楚”.接下来,我们要学习如何激发手机浏览器的高分辨率功能. -------------------------------------------------------------------------------- 以安卓手机为例,我们使用PhoneGap来写一段API代码. 代码A: <!DOCTYPE ht

百度地图API位置偏移的校准算法

转自极客人原文 百度地图API位置偏移的校准算法 在开始使用百度地图API进行开发时可能会遇到一件相当奇怪的事情,使用百度定位的经纬度在地图上显示相当不准确,这一问题我在微信开发和安卓开始时都遇到过.第一次使用百度地图api获取位置并在地图上显示是在微信开发的时候,那是不知道具体原因无奈在微信获取的地理位置上加了一个偏移量进行校准,虽能勉强解决,但是不太准确.后来在安卓开始也同样遇到了这个问题,才发现百度地图API定位偏移已经不是一个偶然问题了. 百度地图API定位偏移的原因 以下来自互联网:

百度地图API详解之自定义地图类型

http://blog.csdn.net/sup_heaven/article/details/8461586 今天的文章主要介绍如何利用地图API实现自定义地图. 百度地图API目前默认支持两种地图类型(map type):普通图和三维图,它们分别通过常量BMAP_NORMAL_MAP和BMAP_PERSPECTIVE_MAP来表示,在1.2版本中这两个常量实际上是MapType对象的实例.当然开发者也可以自己实例化一个MapType从而实现一个自定义的地图. 切图工具的使用 我们先从切图工具