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.location.Location
import android.os.Bundle
import com.amap.api.maps.AMap
import com.amap.api.maps.AMap.OnCameraChangeListener
import com.amap.api.maps.AMap.OnMapLoadedListener
import com.amap.api.maps.AMapOptions
import com.amap.api.maps.CameraUpdateFactory
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.utils.CenterMarkerView
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_select_location.*


class SelectLocationActivity : KotlinBaseActivity(), AMap.OnMyLocationChangeListener,
    OnMapLoadedListener, OnCameraChangeListener {

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

    override fun initLayoutView(): Int = R.layout.activity_select_location

    override fun setupTopBarLayout() {
        ImmersionBar.with(this).statusBarDarkFont(false).init()
        ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
        titleView.text = "手动选点"
        leftBackView.setOnClickListener { finish() }
    }

    override fun initData() {
        aMap = 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 = 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)
        centerMarkerView.initInfoWindowsView(aMap)
    }

    override fun initEvent() {
        aMap.setOnMyLocationChangeListener(this)
        aMap.setOnMapLoadedListener(this)
        aMap.setOnCameraChangeListener(this)

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

    override fun onMyLocationChange(location: Location?) {
        if (location == null) {
            return
        }
        this.latLng = LatLng(location.latitude, location.longitude)
    }

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

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

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

    /**地图相关*********/
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mapView.onCreate(savedInstanceState)
    }

    override fun onResume() {
        super.onResume()
        mapView.onResume()
    }

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

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

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