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

import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.content.Intent
import android.graphics.Color
import android.location.Location
import android.os.Bundle
import android.util.Log
import android.view.animation.LinearInterpolator
import com.amap.api.maps.AMap
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.Marker
import com.amap.api.maps.model.MarkerOptions
import com.amap.api.maps.model.MyLocationStyle
import com.amap.api.maps.model.animation.RotateAnimation
import com.casic.smarttube.R
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() {

    private val kTag = "SelectLocationActivity"
    private lateinit var aMap: AMap
    private lateinit var location: Location

    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))//改变地图的缩放级别
    }

    private var markerOption = MarkerOptions()

    private fun markerAnimation() {
        val animation =
            RotateAnimation(markerOption.rotateAngle, markerOption.rotateAngle + 180, 0F, 0F, 0F)
        val duration = 1000L
        animation.setDuration(duration)
        animation.setInterpolator(LinearInterpolator())

//        marker.setAnimation(animation)
//        marker.startAnimation()
    }

    private lateinit var animatorSet: AnimatorSet
    private fun animTranslate() {
        animatorSet = AnimatorSet()
        animatorSet.playTogether(
//            ObjectAnimator.ofFloat(ivLocation, "scaleX", 1, 0.5f, 1).setDuration(300),
//            ObjectAnimator.ofFloat(ivLocation, "scaleY", 1, 0.5f, 1).setDuration(300)
        )
        animatorSet.start()
    }

    override fun initEvent() {
        aMap.setOnCameraChangeListener(object : AMap.OnCameraChangeListener {
            override fun onCameraChange(p0: CameraPosition?) {

            }

            override fun onCameraChangeFinish(cameraPosition: CameraPosition?) {
                Log.d(kTag, cameraPosition.toString())
                animTranslate()
            }
        })
        //marker拖拽
        aMap.setOnMarkerDragListener(object : AMap.OnMarkerDragListener {
            override fun onMarkerDragStart(p0: Marker?) {

            }

            override fun onMarkerDrag(p0: Marker?) {

            }

            override fun onMarkerDragEnd(p0: Marker?) {
                Log.d(kTag, "onMarkerDragEnd: " + p0!!.position.toString())
            }
        })
        //定位之后就会触发此监听获取经纬度信息
        aMap.setOnMyLocationChangeListener {
            if (it != null) {
                location = it
                Log.d(kTag, "[${location.longitude},${location.latitude}]")
            }
        }

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

    /**地图相关*********/
    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() {
        mapView.onDestroy()
        super.onDestroy()
    }

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