您可以向 3D 地图添加镜头路径动画,为用户提供更具沉浸感的体验。镜头路径动画可以飞到地图上的某个点、围绕该点飞行,或组合使用这两种方式,以动画形式将 Camera 移动到地图上的某个点,包括指定其海拔高度和altitudeMode。
为动画配置 Camera 时,您可以设置 altitudeMode 属性(或调用 setAltitudeMode)来指定如何解读相机的高度:
AltitudeMode.ABSOLUTE: 将海拔高度解读为高于平均海平面的米数(如果 未指定,则为默认值)。AltitudeMode.RELATIVE_TO_GROUND:将高度解读为相机中心点处地面上方的米数。AltitudeMode.RELATIVE_TO_MESH:将海拔高度解读为摄像头中心点处最高 3D 网格表面(例如建筑物或树木)上方的米数。
前往
以下代码示例演示了如何通过使用 FlyToOptions 配置对 GoogleMap3D 调用 flyCameraTo 方法,为 Camera 制作动画,使其飞到 3D 地图上的特定点。
// Add imports and define constants
import com.google.android.gms.maps3d.model.AltitudeMode
import com.google.android.gms.maps3d.model.FlyToOptions
import com.google.android.gms.maps3d.model.FlyAroundOptions
import com.google.android.gms.maps3d.model.Camera
import com.google.android.gms.maps3d.model.Map3DMode
import com.google.android.gms.maps3d.model.latLngAltitude
const val EMPIRE_STATE_BUILDING_LATITUDE = 40.748233
const val EMPIRE_STATE_BUILDING_LONGITUDE = -73.985663
// Add to the onMap3DViewReady method, after the googleMap3D object has been initialized
googleMap3D.setMapMode(Map3DMode.HYBRID)
googleMap3D.flyCameraTo(
flyToOptions {
endCamera = camera {
center = latLngAltitude {
latitude = EMPIRE_STATE_BUILDING_LATITUDE
longitude = EMPIRE_STATE_BUILDING_LONGITUDE
altitude = 212.0 // in meters
}
heading = 34.0 // bearing in degrees
tilt = 67.0 // relative to vertical
range = 750.0 // distance away from the focal point in meters
roll = 0.0 // roll relative to horizontal
altitudeMode = AltitudeMode.RELATIVE_TO_GROUND
}
durationInMillis = 2000
}
)
四处飞行
以下代码示例演示了如何通过使用 FlyAroundOptions 配置对 GoogleMap3D 调用 flyCameraAround 方法,为 Camera 制作动画,使其在 3D 地图上围绕特定点飞行。
// Add imports and define constants
import com.google.android.gms.maps3d.model.AltitudeMode
import com.google.android.gms.maps3d.model.Map3DMode
import com.google.android.gms.maps3d.model.latLngAltitude
const val EMPIRE_STATE_BUILDING_LATITUDE = 40.748233
const val EMPIRE_STATE_BUILDING_LONGITUDE = -73.985663
// Add to the onMap3DViewReady method, after the googleMap3D object has been initialized
googleMap3D.setMapMode(Map3DMode.HYBRID)
googleMap3D.flyCameraAround(
flyAroundOptions {
center = camera {
center = latLngAltitude {
latitude = EMPIRE_STATE_BUILDING_LATITUDE
longitude = EMPIRE_STATE_BUILDING_LONGITUDE
altitude = 212.0
}
heading = 34.0
tilt = 67.0
range = 750.0
roll = 0.0
altitudeMode = AltitudeMode.RELATIVE_TO_GROUND
}
durationInMillis = 5000
rounds = 1.0 // Number of rotations - can be fractional
}
)