Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / view / SelectLocationActivity.kt
package com.casic.smarttube.view

import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import com.amap.api.maps.AMap
import com.amap.api.maps.AMapOptions
import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.UiSettings
import com.amap.api.maps.model.CameraPosition
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.MyLocationStyle
import com.casic.smarttube.R
import com.casic.smarttube.databinding.ActivitySelectLocationBinding
import com.casic.smarttube.extensions.initImmersionBar
import com.casic.smarttube.utils.CenterMarkerView
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.utils.ActivityStackManager


class SelectLocationActivity : KotlinBaseActivity<ActivitySelectLocationBinding>(),
    AMap.OnMapLoadedListener, AMap.OnCameraChangeListener {

    private val kTag = "SelectLocationActivity"
    private lateinit var latLng: LatLng
    private lateinit var aMap: AMap
    private lateinit var centerMarkerView: CenterMarkerView

    override fun initViewBinding(): ActivitySelectLocationBinding {
        return ActivitySelectLocationBinding.inflate(layoutInflater)
    }

    override fun setupTopBarLayout() {
        binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
        binding.titleView.text = "手动选点"
        binding.leftBackView.setOnClickListener { finish() }
    }

    override fun initOnCreate(savedInstanceState: Bundle?) {
        ActivityStackManager.addActivity(this)
        binding.mapView.onCreate(savedInstanceState)

        aMap = binding.mapView.map
        aMap.mapType = AMap.MAP_TYPE_NORMAL
        val locationStyle = MyLocationStyle()
        //定位一次,且将视角移动到地图中心点
        locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE)
        //设置是否显示定位小蓝点
        locationStyle.showMyLocation(true)
        locationStyle.strokeColor(Color.TRANSPARENT)
        locationStyle.strokeWidth(0f)
        locationStyle.radiusFillColor(Color.TRANSPARENT)
        aMap.myLocationStyle = locationStyle
        aMap.isMyLocationEnabled = true
        val uiSettings: UiSettings = aMap.uiSettings
        uiSettings.isCompassEnabled = true
        uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
        //不许地图随手势倾斜角度
        uiSettings.isTiltGesturesEnabled = false
        //不允许地图旋转
        uiSettings.isRotateGesturesEnabled = false
        //设置默认定位按钮是否显示
        uiSettings.isMyLocationButtonEnabled = true
        //改变地图的缩放级别
        aMap.moveCamera(CameraUpdateFactory.zoomTo(15f))
        centerMarkerView = CenterMarkerView(this, aMap)

        aMap.setOnMapLoadedListener(this)
        aMap.setOnCameraChangeListener(this)
    }

    override fun observeRequestState() {

    }

    override fun initEvent() {
        binding.rightOperateView.setOnClickListener {
            val intent = Intent()
            intent.putExtra("longitude", latLng.longitude.toString())
            intent.putExtra("latitude", latLng.latitude.toString())
            setResult(RESULT_OK, intent)
            finish()
        }
    }

    override fun onMapLoaded() {
        centerMarkerView.addCenterMarker()
    }

    override fun onCameraChange(cameraPosition: CameraPosition?) {
        //隐藏中心点marker的InfoWindow
        centerMarkerView.hideCenterMarkerInfoWindow()
    }

    override fun onCameraChangeFinish(cameraPosition: CameraPosition) {
        latLng = cameraPosition.target
        //显示infoWindow
        centerMarkerView.showInfoWindow(latLng)
    }

    /**地图相关*********/
    override fun onResume() {
        super.onResume()
        binding.mapView.onResume()
    }

    override fun onPause() {
        super.onPause()
        binding.mapView.onPause()
    }

    override fun onDestroy() {
        centerMarkerView.destroy()
        binding.mapView.onDestroy()
        super.onDestroy()
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        binding.mapView.onSaveInstanceState(outState)
    }
}