著论准过秦,作赋拟子虚。这篇文章主要讲述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:
【Android自己定义百度地图缩放图标】
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应用开发经常使用知识
- NHibernate3剖析(Mapping篇之集合映射基础:List映射)
- Android Touch事件分发过程
- Android App 内存泄露之Thread
- 使用Android Studo开发NDK之Gradle的配置(能debug C代码)
- Android eclipse 提示java代码 快捷键
- Android 解决ViewPager双层嵌套的滑动问题
- Android在程序中浏览网页
- xxx.app已损坏,打不开.你应该将它移到废纸篓-已解决