高德地圖 marker點擊放大事件,再點擊非當前marker之前marker做動畫還原成本來大小
由於UI的要求,需要在點擊marker爲了凸顯點擊的是當前marker,UI界面上做了放大的處理。
Marker marker = mAmap.addMarker(markerOption);
Animation markerAnimation = new ScaleAnimation(1.0f, 1.6f, 1.0f, 1.6f); // 縮放比例
markerAnimation.setDuration(0); // 動畫時間
markerAnimation.setFillMode(1); // 動畫之後保存的狀態 1 動畫之後的狀態 0 動畫之前的狀態
marker.setAnimation(markerAnimation); // 將動畫賦值給當前的marker
marker.setClickable(true); // marker設置爲可點擊狀態
使用動畫的效果去實現當前marker點擊之後放大或者縮小的效果。
先是賦值了動畫效果,那麼接下來就是在點擊的時候去觸發動畫。
// marker click
AMap.OnMarkerClickListener mMarkerListener = new AMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (mCurrentMemMarker != null) { // 判斷之前放大的marker是否還在放大的狀態
mCurrentMemMarker.startAnimation(); // 將之前放大的marker實現還原的狀態,啓動動畫
setNotClickedMarkerAnim(); // 給之前的marker設置下一次點擊需要放大的動畫效果
}
mCurrentMemMarker = marker; // 當前放大的marker賦值
marker.startAnimation(); // 放大marker的動畫播放
marker.showInfoWindow(); // 顯示當前marker的infowindow
setClickedMarkerAnim(); // 設置放大marker的還原狀態動畫
return false; // 返回:true 表示點擊marker後marker不會移動到地圖中心;返回false 表示點擊marker後marker會自動移動到地圖中心
}
};
先後給需要的marker設置了兩種動畫效果,一種是放大效果,之後保持在放大之後的狀態,一種是還原效果,還原成之前的大小的marker。
點擊之後還原動畫
/**
* setting original animation
*/
private void setClickedMarkerAnim() {
if (mCurrentMemMarker != null) {
Animation markerAnimation = new ScaleAnimation(1.6f, 1.0f, 1.6f, 1.0f); // update original view
markerAnimation.setDuration(0); //set anim time
markerAnimation.setFillMode(1);
mCurrentMemMarker.setAnimation(markerAnimation);
}
}
點擊之前放大動畫
/**
* click then big view marker
*/
private void setNotClickedMarkerAnim() {
if (mCurrentMemMarker != null) {
Animation markerAnimation = new ScaleAnimation(1.0f, 1.6f, 1.0f, 1.6f); //click then big view marker
markerAnimation.setDuration(0);
markerAnimation.setFillMode(1);
mCurrentMemMarker.setAnimation(markerAnimation);
}
}
放大marker的話,不能局部放大,因爲高德地圖本身在加載marker的時候就將我們的view轉化成圖片了,所以要是放大就會出現整體被放大的情況。
下面是點擊之前和點擊之後的效果圖:
高德地圖相關信息,共勉