Android自定义百度地图缩放图标

自定义实现Android百度地图的缩放图标,需要自定义一个缩放控件,实现效果如下:

\\

这里的缩放效果,实现了点击按钮可以对地图的放大缩小,通过手势放大与缩小也控制缩放图标的可用状态。具体实现如下:<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ytfPyMrHZHJhd2FibGXEv8K8z8K1xMG9uPZ4bWzF5NbDzsS8/qO6PC9wPgo8cD56b29tX3NlbGVjdG9yX2luLnhtbDwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">

zoom_selector_out.xml

?
1
2
3
4
5
6
<!--?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" >
</item></item></item></selector>

layout中的zoom_controls_in_out.xml布局文件:

?
1
2
3
4
5
6
7
8
<!--?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><button android:id= "@+id/btn_zoom_out" android:layout_width= "32dp" android:layout_height= "32dp" android:background= "@drawable/zoom_selector_out" >
 
</button></linearlayout>

主配置文件main_activity.xml

?
1
2
3
4
5
<!--?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" >
</com.example.map.view.zoomcontrolsview></com.baidu.mapapi.map.mapview></relativelayout>
相关的xml文件都在这里了,下面是具体实现代码:

自定义缩放控件类ZoomControlsView.java

?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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; //放大按钮
     private Button outBtn; //缩小按钮
     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 );
         //获取放大按钮
         inBtn=(Button) view.findViewById(R.id.btn_zoom_in);
         //获取缩小按钮
         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(); //改变缩放按钮
             break ;
         case R.id.btn_zoom_out:
             //改变地图状态
             this .baiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(mapStatus.zoom- 1 ));
             controlZoomShow(); //改变缩放按钮
             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(); //改变缩放按钮
     }
     
     /**
      * 控制缩放图标显示
      */
     private void controlZoomShow(){
         //获取当前地图状态
         float zoom= this .baiduMap.getMapStatus().zoom;
         //如果当前状态大于等于地图的最大状态,则放大按钮则失效
         if (zoom>=maxZoomLevel){
             inBtn.setBackgroundResource(R.drawable.zoomin_press);
             inBtn.setEnabled( false );
         } else {
             inBtn.setBackgroundResource(R.drawable.zoom_selector_in);
             inBtn.setEnabled( true );
         }
         
         //如果当前状态小于等于地图的最小状态,则缩小按钮失效
         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:

?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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(); //销毁地图
     }
     
}

这样就实现了自定义的缩放图标了


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值