編輯:關於Android編程
自定義實現Android百度地圖的縮放圖標,需要自定義一個縮放控件,實現效果如下:
這裡的縮放效果,實現了點擊按鈕可以對地圖的放大縮小,通過手勢放大與縮小也控制縮放圖標的可用狀態。具體實現如下:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ytfPyMrHZHJhd2FibGXEv8K8z8K1xMG9uPZ4bWzF5NbDzsS8/qO6PC9wPgo8cD56b29tX3NlbGVjdG9yX2luLnhtbDwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">
zoom_selector_out.xml
相關的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;//放大按鈕 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(); } }; }
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();//銷毀地圖 } }
這樣就實現了自定義的縮放圖標了
從Demo3開始,接下來會介紹Design Support組件庫中幾個常用的組件,首先就先從Design Support Library開始說起。Android Des
1.簡單說明淘寶詳情頁就不用我一一介紹了,昨天逛淘寶看到這個效果時,讓我想起了去年剛學習Android只會使用現成的時候,當時在網上找了一個這種效果的使用了,並不懂怎麼實
一加手機與錘子手機一直以來備受關注,近日陸續傳出一加2與錘子2的消息,而且兩者都選在7月28日同一天舉行手機發布會,是不是覺得很有趣?那麼,一加手機2和錘子
一、前言 本篇blog是我的“Android進階”的第一篇文章,從初學Android到現在斷斷續續也有4個多月時間了,也算是有了一些自己的心得體會,也能自