編輯:關於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懸浮的按鈕:FloatActionButton(Design Support Lib)
從Demo3開始,接下來會介紹Design Support組件庫中幾個常用的組件,首先就先從Design Support Library開始說起。Android Des
自定義LinearLayout實現淘寶詳情頁
1.簡單說明淘寶詳情頁就不用我一一介紹了,昨天逛淘寶看到這個效果時,讓我想起了去年剛學習Android只會使用現成的時候,當時在網上找了一個這種效果的使用了,並不懂怎麼實
一加手機2和錘子手機2哪個好 一加2錘子2對比
一加手機與錘子手機一直以來備受關注,近日陸續傳出一加2與錘子2的消息,而且兩者都選在7月28日同一天舉行手機發布會,是不是覺得很有趣?那麼,一加手機2和錘子
Android Orientation Sensor(方向傳感器)詳解與應用
一、前言 本篇blog是我的“Android進階”的第一篇文章,從初學Android到現在斷斷續續也有4個多月時間了,也算是有了一些自己的心得體會,也能自