移動可視區域android
示例代碼api
設置可視區域邊界ide
高德地圖的 Android SDK 容許您經過修改地圖可視區域,改變用戶的觀看視角。函數
可視區域的位置由如下屬性組成:動畫
屏幕當前可視區域的位置能夠經過 AMap.getCameraPosition() 方法獲取。ui
地圖的中心位置。位置使用經度和緯度說明。this
1
2
|
// 獲取當前地圖中心點的座標
LatLng mTarget = aMap.getCameraPosition().target;
|
可視區域的縮放級別決定了地圖的比例。地圖縮放級別爲4-20級,縮放級別沒必要是一個整數。spa
縮放級別較低時,您能夠看到更多地區的地圖;縮放級別高時,您能夠查看地區更加詳細的地圖。3d
下面的圖像顯示出不一樣的縮放級別:
1
2
|
// 獲取當前地圖的縮放級別
float
mZoom = aMap.getCameraPosition().zoom;
|
默認狀況下,地圖的方向爲0度,屏幕正上方指向北方。當您逆時針旋轉地圖時,地圖正北方向與屏幕正上方的夾角度數爲地圖方向,範圍是從0度到360度。例如,一個90度的查詢結果,在地圖上的向上的方向指向正東。
1
2
|
// 獲取當前地圖的旋轉角度
float
mBearing = aMap.getCameraPosition().bearing;
|
可視區域的位置在地圖的中心位置和地球的表面之間的圓弧上,從最低點以度測量(方向直接指向下方的可視區域)。當您改變視角,地圖顯示的角度來看,遠方的建築變小,附近的建築則變大,產生立體效果。
地圖傾角範圍爲0-45度。
1
2
|
// 獲取當前地圖的傾斜角度
float
mTilt = aMap.getCameraPosition().tilt;
|
高德地圖 Android SDK 容許您在屏幕上切換顯示的地圖區域。這是經過改變可視區域的位置實現的。改變可視區域的位置,須要您明確想要把可視區域移動到哪裏。您可以使用 CameraUpdateFactory 建立不一樣類型的 CameraUpdate。如下的選項可供使用。
CameraUpdateFactory.zoomIn() 和 CameraUpdateFactory.zoomOut() 能夠改變縮放級別放大或縮小1,同時保持其餘相同的屬性。
CameraUpdateFactory.zoomTo(float) 改變縮放級別爲一個定值,同時保持其餘相同的屬性。
CameraUpdateFactory.zoomBy(float x) 和 CameraUpdateFactory.zoomBy(float, Point) 經過定值,增長或下降x(若是值爲負數)縮放級別。後者根據地圖上指定座標點,放大或縮小地圖,爲了實現這一點,因此它可能會改變可視區域的中心位置。
這些方法返回一個 CameraUpdate 對象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可視區域顯示在地圖上。
有三個簡便的方法能夠改變位置:
返回一個 CameraUpdate 對象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可視區域顯示在地圖上。
使用 CameraUpdateFactory.changeBearing(float bearing) 方法能夠改變可視區域的方向而且保留其餘屬性。返回一個 CameraUpdate 對象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可視區域顯示在地圖上。
使用 CameraUpdateFactory.changeTilt(float tilt) 方法能夠改變可視區域的傾斜角度而且保留其餘屬性。返回一個 CameraUpdate 對象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可視區域顯示在地圖上。
爲了改變可視區域的位置更加靈活,可使用 CameraUpdateFactory.newCameraPosition(CameraPosition) 移動可視區域到指定位置。CameraPosition 能夠用如下方法直接獲取:使用 new CameraPosition() 或使用 new CameraPosition.Builder()。
返回一個 CameraUpdate 對象,使用 AMap.moveCamera(CameraUpdate update) 方法更新可視區域顯示在地圖上。
示例代碼以下(詳細信息,請參考示例工程「Camera 功能」案例 / com.amapv2.apis.basic.CameraActivity.java):
詳細信息,請參考示例工程「Camera 功能」案例 / com.amapv2.apis.basic.CameraActivity.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
|
public
class
CameraActivity
extends
Activity
implements
OnClickListener,
CancelableCallback {
/**
* 根據動畫按鈕狀態,調用函數animateCamera或moveCamera來改變可視區域
*/
private
void
changeCamera(CameraUpdate update, CancelableCallback callback) {
boolean
animated = ((CompoundButton) findViewById(R.id.animate))
.isChecked();
if
(animated) {
aMap.animateCamera(update,
1000
, callback);
}
else
{
aMap.moveCamera(update);
}
}
@Override
public
void
onClick(View v) {
switch
(v.getId()) {
/**
* 點擊中止動畫按鈕響應事件
*/
case
R.id.stop_animation:
aMap.stopAnimation();
break
;
/**
* 點擊「去中關村」按鈕響應事件
*/
case
R.id.Zhongguancun:
changeCamera(
CameraUpdateFactory.newCameraPosition(
new
CameraPosition(
Constants.ZHONGGUANCUN,
18
,
0
,
30
)),
null
);
break
;
/**
* 點擊「去陸家嘴」按鈕響應事件
*/
case
R.id.Lujiazui:
changeCamera(
CameraUpdateFactory.newCameraPosition(
new
CameraPosition(
Constants.SHANGHAI,
18
,
30
,
0
)),
this
);
break
;
/**
* 點擊向左移動按鈕響應事件,camera將向左邊移動
*/
case
R.id.scroll_left:
changeCamera(CameraUpdateFactory.scrollBy(-SCROLL_BY_PX,
0
),
null
);
break
;
/**
* 點擊向右移動按鈕響應事件,camera將向右邊移動
*/
case
R.id.scroll_right:
changeCamera(CameraUpdateFactory.scrollBy(SCROLL_BY_PX,
0
),
null
);
break
;
/**
* 點擊向上移動按鈕響應事件,camera將向上邊移動
*/
case
R.id.scroll_up:
changeCamera(CameraUpdateFactory.scrollBy(
0
, -SCROLL_BY_PX),
null
);
break
;
/**
* 點擊向下移動按鈕響應事件,camera將向下邊移動
*/
case
R.id.scroll_down:
changeCamera(CameraUpdateFactory.scrollBy(
0
, SCROLL_BY_PX),
null
);
break
;
/**
* 點擊地圖縮小按鈕響應事件
*/
case
R.id.zoom_in:
changeCamera(CameraUpdateFactory.zoomIn(),
null
);
break
;
/**
* 點擊地圖放大按鈕響應事件
*/
case
R.id.zoom_out:
changeCamera(CameraUpdateFactory.zoomOut(),
null
);
break
;
default
:
break
;
}
}
@Override
public
void
onCancel() {
ToastUtil.show(CameraActivity.
this
,
"Animation to 陸家嘴 canceled"
);
}
@Override
public
void
onFinish() {
ToastUtil.show(CameraActivity.
this
,
"Animation to 陸家嘴 complete"
);
}
}
|
在最大可能縮放級別下,移動可視區域保證全部興趣點都是可見的,這種狀況下,就須要設置可視區域邊界。例如:顯示用戶當前位置5千米範圍內的全部加油站,您想要移動可視區域保證全部的加油站均可以在屏幕上顯示。
使用 CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int padding) 獲取一個 CameraUpdate 對象,改變可視區域(使用 Projection.getVisibleRegion() 方法能夠計算屏幕區域 LatLngBounds 的大小)。注意:地圖的方向和傾斜角都應該爲0度。
重載方法 CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int width, int height, int padding) 容許您指定矩形區域的長和寬(像素爲單位)。
說明
1.newLatLngBounds(LatLngBounds bounds, int padding) 方法須要在地圖初始化完成以後使用。
2.在 onCreate 時設置可視區域邊界,須要使用接口 AMap.OnMapLoadedListener。當地圖載入成功後回調 onMapLoaded() 方法。
示例代碼以下(詳細信息,請參考示例工程「Markers 功能」案例 / com.amapv2.apis.overlay.MarkerActivity.java):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public
class
MarkerActivity
extends
FragmentActivity
implements
OnMapLoadedListener {
/**
* 監聽amap地圖加載成功事件回調
*/
@Override
public
void
onMapLoaded() {
// 設置全部maker顯示在View中
LatLngBounds bounds =
new
LatLngBounds.Builder()
.include(Constants.XIAN).include(Constants.CHENGDU)
.include(marker1).include(marker2).include(marker3)
.include(marker4).include(marker5).include(marker6)
.include(marker7).include(marker8).include(marker9)
.include(marker10).build();
// 移動地圖,全部marker自適應顯示。LatLngBounds與地圖邊緣10像素的填充區域
aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds,
10
));
}
}
|