This commit is contained in:
wangcongtao
2020-04-22 20:22:47 +08:00
parent a9cbb82420
commit c6378cfc07
7 changed files with 295 additions and 153 deletions

View File

@@ -4,6 +4,7 @@ import android.graphics.BitmapFactory
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.view.animation.BounceInterpolator
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.facade.annotation.Route
@@ -11,6 +12,7 @@ import com.mogo.map.MogoLatLng
import com.mogo.map.listener.IMogoMapListener
import com.mogo.map.marker.IMogoMarker
import com.mogo.map.marker.MogoMarkerOptions
import com.mogo.map.marker.anim.OnMarkerAnimationListener
import com.mogo.map.search.geo.IMogoGeoSearchListener
import com.mogo.map.search.geo.MogoGeocodeResult
import com.mogo.map.search.geo.MogoRegeocodeResult
@@ -43,161 +45,152 @@ import kotlinx.android.synthetic.main.fragment_setting_address.tv_set_as_home
* 2020-01-07.
*/
class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
override fun onRegeocodeSearched(regeocodeResult: MogoRegeocodeResult?) {
et_navi_search.setText(regeocodeResult?.regeocodeAddress?.formatAddress)
var formatAddress = regeocodeResult?.regeocodeAddress?.formatAddress
selectPoi?.address = formatAddress
override fun onRegeocodeSearched(regeocodeResult: MogoRegeocodeResult?) {
et_navi_search.setText(regeocodeResult?.regeocodeAddress?.formatAddress)
var formatAddress = regeocodeResult?.regeocodeAddress?.formatAddress
selectPoi?.address = formatAddress
var neighborhood = regeocodeResult?.regeocodeAddress?.neighborhood
if (!TextUtils.isEmpty(neighborhood)) {
selectPoi?.name = neighborhood
} else {
selectPoi?.name = formatAddress
}
}
override fun onGeocodeSearched(geocodeResult: MogoGeocodeResult?) {
}
private val TAG: String = "SettingAddressFragment"
private var style: Int = DataConstants.TYPE_HOME_ADDRESS
var addMarker: IMogoMarker? = null
private var selectPoi: SearchPoi? = null
private var mapListener: IMogoMapListener = object : MogoMapListenerAdapter() {
override fun onMapChanged(
latLng: MogoLatLng?,
zoom: Float,
tilt: Float,
bearing: Float
) {
super.onMapChanged(latLng, zoom, tilt, bearing)
selectPoi = EntityConvertUtils.geoToPoi(latLng?.lat ?: 0.0, latLng?.lng ?: 0.0, style)
var mogoRegeocodeQuery = MogoRegeocodeQuery()
mogoRegeocodeQuery.point = latLng
SearchServiceHolder.getGeoSearcher()
.getFromLocationAsyn(mogoRegeocodeQuery)
addMarker?.apply {
SearchServiceHolder.getMapUIController()
.startJumpAnimation(
this,
150f, { input ->
if (input <= 0.5) {
(0.5f - 2.0 * (0.5 - input) * (0.5 - input)).toFloat()
} else {
(0.5f - Math.sqrt(((input - 0.5f) * (1.5f - input)).toDouble())).toFloat()
}
}, 600
)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) ?: DataConstants.TYPE_HOME_ADDRESS
SearchServiceHolder.listenerCenter.registerMogoMapListener(
AMapConstants.PATH_FRAGMENT_SETTING_HOME, mapListener
)
SearchServiceHolder.getMapUIController().showMyLocation(false)
SearchServiceHolder.getGeoSearcher().setGeoSearchListener(this)
SearchServiceHolder.getMarkerManger().removeMarkers()
}
override fun getLayoutId(): Int {
return R.layout.fragment_setting_address
}
fun isHome(): Boolean {
return style == DataConstants.TYPE_HOME_ADDRESS
}
fun isCompony(): Boolean {
return style == DataConstants.TYPE_COMPANY_ADDRESS
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
super.onViewCreated(view, savedInstanceState)
if (isHome()) {
tv_set_as_home.text = resources.getString(R.string.set_as_home_navi)
} else {
tv_set_as_home.text = resources.getString(R.string.set_as_compony_navi)
var neighborhood = regeocodeResult?.regeocodeAddress?.neighborhood
if (!TextUtils.isEmpty(neighborhood)) {
selectPoi?.name = neighborhood
} else {
selectPoi?.name = formatAddress
}
}
iv_navi_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
}
tv_set_as_home.setOnClickListener {
if (selectPoi == null) {
Toast.makeText(context, "请选择", Toast.LENGTH_SHORT)
.show()
return@setOnClickListener
}
insert(selectPoi!!)
SearchServiceHolder.fragmentManager.pop()
override fun onGeocodeSearched(geocodeResult: MogoGeocodeResult?) {
}
et_navi_search.isEnabled = false
et_navi_search.setText(getString(string.drag_map_to_choose))
var location = SearchServiceHolder.getMapUIController().windowCenterLocation
private val TAG: String = "SettingAddressFragment"
private var style: Int = DataConstants.TYPE_HOME_ADDRESS
var addMarker: IMogoMarker? = null
UiThreadHandler.postDelayed({
if (!isAdded) {
return@postDelayed
}
var decodeResource = BitmapFactory.decodeResource(resources, R.mipmap.icon_choose_position2)
val options = MogoMarkerOptions()
.icon(decodeResource)
.latitude(location?.lat ?: 0.0)
.owner(TAG)
.anchor(0.5f, 1f)
.longitude(location?.lng ?: 0.0)
addMarker = SearchServiceHolder.getMarkerManger()
.addMarker(AMapConstants.PATH_FRAGMENT_SETTING_HOME, options)
private var selectPoi: SearchPoi? = null
private var mapListener: IMogoMapListener = object : MogoMapListenerAdapter() {
override fun onMapChanged(
latLng: MogoLatLng?,
zoom: Float,
tilt: Float,
bearing: Float) {
super.onMapChanged(latLng, zoom, tilt, bearing)
selectPoi = EntityConvertUtils.geoToPoi(latLng?.lat ?: 0.0, latLng?.lng ?: 0.0, style)
var mogoRegeocodeQuery = MogoRegeocodeQuery()
mogoRegeocodeQuery.point = latLng
SearchServiceHolder.getGeoSearcher().getFromLocationAsyn(mogoRegeocodeQuery)
addMarker?.startJumpAnimation(
150f,
600,
{ input ->
if (input <= 0.5) {
(0.5f - 2.0 * (0.5 - input) * (0.5 - input)).toFloat()
} else {
(0.5f - Math.sqrt(((input - 0.5f) * (1.5f - input)).toDouble())).toFloat()
}
}, null)
var locationPointInScreen = SearchServiceHolder.getMapUIController().getLocationPointInScreen(location)
addMarker?.setPositionByPixels(locationPointInScreen)
}, 500L)
}
fun insert(searchPoi: SearchPoi) {
AddressManager.insert(searchPoi)
Observable.create(
ObservableOnSubscribe<String> {
AppDataBase.getDatabase(activity)
.poiDao()
.insert(searchPoi)
AddressHelper.notifyAddressChanged(searchPoi.type)
})
.subscribeOn(Schedulers.io())
.subscribe()
}
override fun onDestroyView() {
super.onDestroyView()
SearchServiceHolder.listenerCenter.unregisterMogoMapListener(
AMapConstants.PATH_FRAGMENT_SETTING_HOME
)
addMarker?.destroy()
}
companion object {
fun newInstance(type: Int = DataConstants.TYPE_HOME_ADDRESS): Fragment {
var settingAddressFragment = SettingAddressFragment()
val bundle = Bundle()
bundle.putInt(AMapConstants.KEY_SET_HOME_COMPONY, type)
settingAddressFragment.setArguments(bundle)
return settingAddressFragment
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY)
?: DataConstants.TYPE_HOME_ADDRESS
SearchServiceHolder.listenerCenter.registerMogoMapListener(AMapConstants.PATH_FRAGMENT_SETTING_HOME, mapListener)
SearchServiceHolder.getMapUIController().showMyLocation(false)
SearchServiceHolder.getGeoSearcher().setGeoSearchListener(this)
SearchServiceHolder.getMarkerManger().removeMarkers()
}
override fun getLayoutId(): Int {
return R.layout.fragment_setting_address
}
fun isHome(): Boolean {
return style == DataConstants.TYPE_HOME_ADDRESS
}
fun isCompony(): Boolean {
return style == DataConstants.TYPE_COMPANY_ADDRESS
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (isHome()) {
tv_set_as_home.text = resources.getString(R.string.set_as_home_navi)
} else {
tv_set_as_home.text = resources.getString(R.string.set_as_compony_navi)
}
iv_navi_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
}
tv_set_as_home.setOnClickListener {
if (selectPoi == null) {
Toast.makeText(context, "请选择", Toast.LENGTH_SHORT)
.show()
return@setOnClickListener
}
insert(selectPoi!!)
SearchServiceHolder.fragmentManager.pop()
}
et_navi_search.isEnabled = false
et_navi_search.setText(getString(string.drag_map_to_choose))
var location = SearchServiceHolder.getMapUIController().windowCenterLocation
UiThreadHandler.postDelayed({
if (!isAdded) {
return@postDelayed
}
var decodeResource = BitmapFactory.decodeResource(resources, R.mipmap.icon_choose_position2)
val options = MogoMarkerOptions()
.icon(decodeResource)
.latitude(location?.lat ?: 0.0)
.owner(TAG)
.anchor(0.5f, 1f)
.longitude(location?.lng ?: 0.0)
addMarker = SearchServiceHolder.getMarkerManger()
.addMarker(AMapConstants.PATH_FRAGMENT_SETTING_HOME, options)
var locationPointInScreen = SearchServiceHolder.getMapUIController().getLocationPointInScreen(location)
addMarker?.setPositionByPixels(locationPointInScreen)
}, 500L)
}
fun insert(searchPoi: SearchPoi) {
AddressManager.insert(searchPoi)
Observable.create(
ObservableOnSubscribe<String> {
AppDataBase.getDatabase(activity)
.poiDao()
.insert(searchPoi)
AddressHelper.notifyAddressChanged(searchPoi.type)
})
.subscribeOn(Schedulers.io())
.subscribe()
}
override fun onDestroyView() {
super.onDestroyView()
SearchServiceHolder.listenerCenter.unregisterMogoMapListener(
AMapConstants.PATH_FRAGMENT_SETTING_HOME
)
addMarker?.destroy()
}
companion object {
fun newInstance(type: Int = DataConstants.TYPE_HOME_ADDRESS): Fragment {
var settingAddressFragment = SettingAddressFragment()
val bundle = Bundle()
bundle.putInt(AMapConstants.KEY_SET_HOME_COMPONY, type)
settingAddressFragment.setArguments(bundle)
return settingAddressFragment
}
}
}
}