300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android在GoogleMap(百度地图)实现自定义指南针旋转与回正功能

Android在GoogleMap(百度地图)实现自定义指南针旋转与回正功能

时间:2022-06-17 06:43:45

相关推荐

Android在GoogleMap(百度地图)实现自定义指南针旋转与回正功能

Android在GoogleMap(百度地图)实现自定义指南针旋转与回正功能

关于效果图实现(这里只讲googleMap)

关于

因为项目需要,需要在googleMap上面自定义指南针,实现指南针实时根据地图方位变化转动,点击指南针方位回正两个功能。

效果图

可以参考高德地图导航开始后地图旋转的指南针效果。

因为手机像素过高的原因,导致我没法一次上传上来,这个是旋转效果。

定位回正

实现(这里只讲googleMap)

关于GoogleMap的引用可以先看这篇《Android使用GoogleMap实现定位及定位回正》

我们新建一个activity,修改activity_google_maps.xml(compass的图标可以去阿里巴巴图标库等去找即可):

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.stationdm.kawasaki.GoogleMapsActivity"><fragmentandroid:layout_width="match_parent"android:layout_height="match_parent"android:name="com.google.android.gms.maps.SupportMapFragment"android:id="@+id/map"/><com.google.android.material.floatingactionbutton.FloatingActionButtonandroid:id="@+id/fab_compass_location"android:layout_width="48dp"android:layout_height="48dp"android:src="@drawable/ic_map_compass_icon"app:fabCustomSize="48dp"app:layout_constraintTop_toTopOf="parent"app:layout_constraintEnd_toEndOf="parent"android:layout_marginEnd="16dp"android:layout_marginTop="16dp" /></androidx.constraintlayout.widget.ConstraintLayout>

修改GoogleMapsActivity

private var map:GoogleMap? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityGoogleMapsBinding.inflate(layoutInflater)setContentView(binding.root)val mapFragment : SupportMapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragmentmapFragment.getMapAsync(this)//指南针回正binding.fabCompassLocation.setOnSingleClickListener {map?.cameraPosition?.target?.let {val cameraPosition = CameraPosition.Builder().target(LatLng(it.latitude, it.longitude)).zoom(map!!.cameraPosition.zoom).bearing(0f).tilt(map!!.cameraPosition.tilt).build()map!!.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition))}}}@SuppressLint("MissingPermission")override fun onMapReady(googleMap: GoogleMap) {map = googleMapgoogleMap.mapType = GoogleMap.MAP_TYPE_HYBRID//关于定位权限在我这里就不做赘述了,这里假设定位以及成功了map?.setCompassEnabled(false)//这里可以打开看一下我们实际效果和自带的是否有差异//添加相机移动的监听和空闲监听用来作为控制指南针监听的开关map?.setOnCameraMoveStartedListener(this)map?.setOnCameraIdleListener(this)//页面继承方法}override fun onCameraMoveStarted(p0: Int) {when (p0) {GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {//手势引起的地图移动openRotation(true)}}}override fun onCameraIdle() {openRotation(false)}//是否开启旋转private fun openRotation(isOpen: Boolean) {if (isOpen) {job?.cancel()job = lifecycleScope.launch {delay(100) //测试发现延迟0.1ms效果比较流畅map?.cameraPosition?.bearing?.let {binding.fabCompassLocation.rotation = -itopenRotation(isOpen)}}}}

本篇到此就结束了,有问题欢迎批评指教,觉得不错的也请点个赞,谢谢

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。