diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index 981d706..7118bbb 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -405,8 +405,16 @@ GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { if (rCode == 1000) { - locationView.text = - String.format("详细位置: ${result?.regeocodeAddress?.formatAddress}") + val address = result?.regeocodeAddress?.formatAddress + val temp = StringBuilder() + if (address!!.length > 16) { + temp.append(address.substring(0, 14)) + .append("\r\n") + .append(address.substring(16)) + } else { + temp.append(address) + } + locationView.text = String.format("详细位置: $temp") } } diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index 981d706..7118bbb 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -405,8 +405,16 @@ GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { if (rCode == 1000) { - locationView.text = - String.format("详细位置: ${result?.regeocodeAddress?.formatAddress}") + val address = result?.regeocodeAddress?.formatAddress + val temp = StringBuilder() + if (address!!.length > 16) { + temp.append(address.substring(0, 14)) + .append("\r\n") + .append(address.substring(16)) + } else { + temp.append(address) + } + locationView.text = String.format("详细位置: $temp") } } diff --git a/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java new file mode 100644 index 0000000..7e110ed --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java @@ -0,0 +1,131 @@ +package com.casic.smarttube.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.animation.Animation; +import com.amap.api.maps.model.animation.ScaleAnimation; +import com.amap.api.services.core.AMapException; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.casic.smarttube.R; + +public class CenterMarkerView { + + private final Context context; + private Marker centerMarker; + private LatLng latLng; + private GeocodeSearch geocoderSearch; + + public CenterMarkerView(Context context) { + this.context = context; + try { + geocoderSearch = new GeocodeSearch(context); + } catch (AMapException e) { + e.printStackTrace(); + } + } + + public void addCenterMarker(AMap aMap) { + MarkerOptions options = new MarkerOptions(); + //对应Marker.setIcon方法 设置Marker的图片 + options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin)); + //设置infoWindow与锚点的相对位置 + options.anchor(0.5F, 1); + //拿到地图中心点的坐标。 + LatLng latLng = aMap.getCameraPosition().target; + //把中心点的坐标转换成屏幕像素位置 + Point screenPosition = aMap.getProjection().toScreenLocation(latLng); + //在地图上添加Marker并获取到Marker. + centerMarker = aMap.addMarker(options); + //给marker设置像素位置。 + centerMarker.setPositionByPixels(screenPosition.x, screenPosition.y); + centerMarker.setAnchor(0.5F, 1); + } + + public void initInfoWindowsView(AMap aMap) { + aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() { + @Override + public View getInfoWindow(Marker marker) { + View infoWindow = LayoutInflater.from(context).inflate(R.layout.map_info_window, null); + TextView locationView = infoWindow.findViewById(R.id.locationView); + RegeocodeQuery queryParam = new RegeocodeQuery( + new LatLonPoint(latLng.latitude, latLng.longitude), + 200f, + GeocodeSearch.AMAP + ); + geocoderSearch.getFromLocationAsyn(queryParam); + geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int code) { + if (code == 1000) { + //手动换行 + String address = regeocodeResult.getRegeocodeAddress().getFormatAddress(); + StringBuilder temp = new StringBuilder(); + if (address.length() > 20) { + temp.append(address.substring(0, 20)).append("\r\n").append(address.substring(20)); + } else { + temp.append(address); + } + locationView.setText(temp); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } + }); + return infoWindow; + } + + @Override + public View getInfoContents(Marker marker) { + return null; + } + }); + } + + public void showInfoWindow(LatLng latLng) { + this.latLng = latLng; + if (null != centerMarker) { + //缩放动画 + Animation scaleAnimation = new ScaleAnimation(1F, 1F, 0.75F, 1F); + //时间设置短点 + scaleAnimation.setDuration(500); + centerMarker.setAnimation(scaleAnimation); + centerMarker.startAnimation(); + + centerMarker.showInfoWindow(); + } + } + + + public void hideCenterMarkerInfoWindow() { + centerMarker.hideInfoWindow(); + if (null != centerMarker) { + Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.map_pin); + centerMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap)); + } + } + + public void destroy() { + if (null != centerMarker) { + centerMarker.destroy(); + centerMarker.showInfoWindow(); + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index 981d706..7118bbb 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -405,8 +405,16 @@ GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { if (rCode == 1000) { - locationView.text = - String.format("详细位置: ${result?.regeocodeAddress?.formatAddress}") + val address = result?.regeocodeAddress?.formatAddress + val temp = StringBuilder() + if (address!!.length > 16) { + temp.append(address.substring(0, 14)) + .append("\r\n") + .append(address.substring(16)) + } else { + temp.append(address) + } + locationView.text = String.format("详细位置: $temp") } } diff --git a/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java new file mode 100644 index 0000000..7e110ed --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java @@ -0,0 +1,131 @@ +package com.casic.smarttube.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.animation.Animation; +import com.amap.api.maps.model.animation.ScaleAnimation; +import com.amap.api.services.core.AMapException; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.casic.smarttube.R; + +public class CenterMarkerView { + + private final Context context; + private Marker centerMarker; + private LatLng latLng; + private GeocodeSearch geocoderSearch; + + public CenterMarkerView(Context context) { + this.context = context; + try { + geocoderSearch = new GeocodeSearch(context); + } catch (AMapException e) { + e.printStackTrace(); + } + } + + public void addCenterMarker(AMap aMap) { + MarkerOptions options = new MarkerOptions(); + //对应Marker.setIcon方法 设置Marker的图片 + options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin)); + //设置infoWindow与锚点的相对位置 + options.anchor(0.5F, 1); + //拿到地图中心点的坐标。 + LatLng latLng = aMap.getCameraPosition().target; + //把中心点的坐标转换成屏幕像素位置 + Point screenPosition = aMap.getProjection().toScreenLocation(latLng); + //在地图上添加Marker并获取到Marker. + centerMarker = aMap.addMarker(options); + //给marker设置像素位置。 + centerMarker.setPositionByPixels(screenPosition.x, screenPosition.y); + centerMarker.setAnchor(0.5F, 1); + } + + public void initInfoWindowsView(AMap aMap) { + aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() { + @Override + public View getInfoWindow(Marker marker) { + View infoWindow = LayoutInflater.from(context).inflate(R.layout.map_info_window, null); + TextView locationView = infoWindow.findViewById(R.id.locationView); + RegeocodeQuery queryParam = new RegeocodeQuery( + new LatLonPoint(latLng.latitude, latLng.longitude), + 200f, + GeocodeSearch.AMAP + ); + geocoderSearch.getFromLocationAsyn(queryParam); + geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int code) { + if (code == 1000) { + //手动换行 + String address = regeocodeResult.getRegeocodeAddress().getFormatAddress(); + StringBuilder temp = new StringBuilder(); + if (address.length() > 20) { + temp.append(address.substring(0, 20)).append("\r\n").append(address.substring(20)); + } else { + temp.append(address); + } + locationView.setText(temp); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } + }); + return infoWindow; + } + + @Override + public View getInfoContents(Marker marker) { + return null; + } + }); + } + + public void showInfoWindow(LatLng latLng) { + this.latLng = latLng; + if (null != centerMarker) { + //缩放动画 + Animation scaleAnimation = new ScaleAnimation(1F, 1F, 0.75F, 1F); + //时间设置短点 + scaleAnimation.setDuration(500); + centerMarker.setAnimation(scaleAnimation); + centerMarker.startAnimation(); + + centerMarker.showInfoWindow(); + } + } + + + public void hideCenterMarkerInfoWindow() { + centerMarker.hideInfoWindow(); + if (null != centerMarker) { + Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.map_pin); + centerMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap)); + } + } + + public void destroy() { + if (null != centerMarker) { + centerMarker.destroy(); + centerMarker.showInfoWindow(); + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt index 2563eaf..768b363 100644 --- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt @@ -213,7 +213,6 @@ } }) } - //TODO 地图选点 1 -> selectLocationLauncher.launch( Intent(context, SelectLocationActivity::class.java) ) diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index 981d706..7118bbb 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -405,8 +405,16 @@ GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { if (rCode == 1000) { - locationView.text = - String.format("详细位置: ${result?.regeocodeAddress?.formatAddress}") + val address = result?.regeocodeAddress?.formatAddress + val temp = StringBuilder() + if (address!!.length > 16) { + temp.append(address.substring(0, 14)) + .append("\r\n") + .append(address.substring(16)) + } else { + temp.append(address) + } + locationView.text = String.format("详细位置: $temp") } } diff --git a/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java new file mode 100644 index 0000000..7e110ed --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java @@ -0,0 +1,131 @@ +package com.casic.smarttube.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.animation.Animation; +import com.amap.api.maps.model.animation.ScaleAnimation; +import com.amap.api.services.core.AMapException; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.casic.smarttube.R; + +public class CenterMarkerView { + + private final Context context; + private Marker centerMarker; + private LatLng latLng; + private GeocodeSearch geocoderSearch; + + public CenterMarkerView(Context context) { + this.context = context; + try { + geocoderSearch = new GeocodeSearch(context); + } catch (AMapException e) { + e.printStackTrace(); + } + } + + public void addCenterMarker(AMap aMap) { + MarkerOptions options = new MarkerOptions(); + //对应Marker.setIcon方法 设置Marker的图片 + options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin)); + //设置infoWindow与锚点的相对位置 + options.anchor(0.5F, 1); + //拿到地图中心点的坐标。 + LatLng latLng = aMap.getCameraPosition().target; + //把中心点的坐标转换成屏幕像素位置 + Point screenPosition = aMap.getProjection().toScreenLocation(latLng); + //在地图上添加Marker并获取到Marker. + centerMarker = aMap.addMarker(options); + //给marker设置像素位置。 + centerMarker.setPositionByPixels(screenPosition.x, screenPosition.y); + centerMarker.setAnchor(0.5F, 1); + } + + public void initInfoWindowsView(AMap aMap) { + aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() { + @Override + public View getInfoWindow(Marker marker) { + View infoWindow = LayoutInflater.from(context).inflate(R.layout.map_info_window, null); + TextView locationView = infoWindow.findViewById(R.id.locationView); + RegeocodeQuery queryParam = new RegeocodeQuery( + new LatLonPoint(latLng.latitude, latLng.longitude), + 200f, + GeocodeSearch.AMAP + ); + geocoderSearch.getFromLocationAsyn(queryParam); + geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int code) { + if (code == 1000) { + //手动换行 + String address = regeocodeResult.getRegeocodeAddress().getFormatAddress(); + StringBuilder temp = new StringBuilder(); + if (address.length() > 20) { + temp.append(address.substring(0, 20)).append("\r\n").append(address.substring(20)); + } else { + temp.append(address); + } + locationView.setText(temp); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } + }); + return infoWindow; + } + + @Override + public View getInfoContents(Marker marker) { + return null; + } + }); + } + + public void showInfoWindow(LatLng latLng) { + this.latLng = latLng; + if (null != centerMarker) { + //缩放动画 + Animation scaleAnimation = new ScaleAnimation(1F, 1F, 0.75F, 1F); + //时间设置短点 + scaleAnimation.setDuration(500); + centerMarker.setAnimation(scaleAnimation); + centerMarker.startAnimation(); + + centerMarker.showInfoWindow(); + } + } + + + public void hideCenterMarkerInfoWindow() { + centerMarker.hideInfoWindow(); + if (null != centerMarker) { + Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.map_pin); + centerMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap)); + } + } + + public void destroy() { + if (null != centerMarker) { + centerMarker.destroy(); + centerMarker.showInfoWindow(); + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt index 2563eaf..768b363 100644 --- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt @@ -213,7 +213,6 @@ } }) } - //TODO 地图选点 1 -> selectLocationLauncher.launch( Intent(context, SelectLocationActivity::class.java) ) diff --git a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt index d7c462b..0f588b5 100644 --- a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt @@ -1,22 +1,19 @@ 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.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.Marker -import com.amap.api.maps.model.MarkerOptions +import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle -import com.amap.api.maps.model.animation.RotateAnimation 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 @@ -24,11 +21,13 @@ import kotlinx.android.synthetic.main.activity_select_location.* -class SelectLocationActivity : KotlinBaseActivity() { +class SelectLocationActivity : KotlinBaseActivity(), AMap.OnMyLocationChangeListener, + OnMapLoadedListener, OnCameraChangeListener { private val kTag = "SelectLocationActivity" + private lateinit var latLng: LatLng private lateinit var aMap: AMap - private lateinit var location: Location + private lateinit var centerMarkerView: CenterMarkerView override fun initLayoutView(): Int = R.layout.activity_select_location @@ -55,77 +54,55 @@ 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))//改变地图的缩放级别 - } + //不许地图随手势倾斜角度 + 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() + centerMarkerView = CenterMarkerView(this) + centerMarkerView.initInfoWindowsView(aMap) } 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}]") - } - } + aMap.setOnMyLocationChangeListener(this) + aMap.setOnMapLoadedListener(this) + aMap.setOnCameraChangeListener(this) rightOperateView.setOnClickListener { val intent = Intent() - intent.putExtra("longitude", location.longitude.toString()) - intent.putExtra("latitude", location.latitude.toString()) + 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) @@ -143,6 +120,7 @@ } override fun onDestroy() { + centerMarkerView.destroy() mapView.onDestroy() super.onDestroy() } diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index 981d706..7118bbb 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -405,8 +405,16 @@ GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { if (rCode == 1000) { - locationView.text = - String.format("详细位置: ${result?.regeocodeAddress?.formatAddress}") + val address = result?.regeocodeAddress?.formatAddress + val temp = StringBuilder() + if (address!!.length > 16) { + temp.append(address.substring(0, 14)) + .append("\r\n") + .append(address.substring(16)) + } else { + temp.append(address) + } + locationView.text = String.format("详细位置: $temp") } } diff --git a/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java new file mode 100644 index 0000000..7e110ed --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java @@ -0,0 +1,131 @@ +package com.casic.smarttube.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.animation.Animation; +import com.amap.api.maps.model.animation.ScaleAnimation; +import com.amap.api.services.core.AMapException; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.casic.smarttube.R; + +public class CenterMarkerView { + + private final Context context; + private Marker centerMarker; + private LatLng latLng; + private GeocodeSearch geocoderSearch; + + public CenterMarkerView(Context context) { + this.context = context; + try { + geocoderSearch = new GeocodeSearch(context); + } catch (AMapException e) { + e.printStackTrace(); + } + } + + public void addCenterMarker(AMap aMap) { + MarkerOptions options = new MarkerOptions(); + //对应Marker.setIcon方法 设置Marker的图片 + options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin)); + //设置infoWindow与锚点的相对位置 + options.anchor(0.5F, 1); + //拿到地图中心点的坐标。 + LatLng latLng = aMap.getCameraPosition().target; + //把中心点的坐标转换成屏幕像素位置 + Point screenPosition = aMap.getProjection().toScreenLocation(latLng); + //在地图上添加Marker并获取到Marker. + centerMarker = aMap.addMarker(options); + //给marker设置像素位置。 + centerMarker.setPositionByPixels(screenPosition.x, screenPosition.y); + centerMarker.setAnchor(0.5F, 1); + } + + public void initInfoWindowsView(AMap aMap) { + aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() { + @Override + public View getInfoWindow(Marker marker) { + View infoWindow = LayoutInflater.from(context).inflate(R.layout.map_info_window, null); + TextView locationView = infoWindow.findViewById(R.id.locationView); + RegeocodeQuery queryParam = new RegeocodeQuery( + new LatLonPoint(latLng.latitude, latLng.longitude), + 200f, + GeocodeSearch.AMAP + ); + geocoderSearch.getFromLocationAsyn(queryParam); + geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int code) { + if (code == 1000) { + //手动换行 + String address = regeocodeResult.getRegeocodeAddress().getFormatAddress(); + StringBuilder temp = new StringBuilder(); + if (address.length() > 20) { + temp.append(address.substring(0, 20)).append("\r\n").append(address.substring(20)); + } else { + temp.append(address); + } + locationView.setText(temp); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } + }); + return infoWindow; + } + + @Override + public View getInfoContents(Marker marker) { + return null; + } + }); + } + + public void showInfoWindow(LatLng latLng) { + this.latLng = latLng; + if (null != centerMarker) { + //缩放动画 + Animation scaleAnimation = new ScaleAnimation(1F, 1F, 0.75F, 1F); + //时间设置短点 + scaleAnimation.setDuration(500); + centerMarker.setAnimation(scaleAnimation); + centerMarker.startAnimation(); + + centerMarker.showInfoWindow(); + } + } + + + public void hideCenterMarkerInfoWindow() { + centerMarker.hideInfoWindow(); + if (null != centerMarker) { + Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.map_pin); + centerMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap)); + } + } + + public void destroy() { + if (null != centerMarker) { + centerMarker.destroy(); + centerMarker.showInfoWindow(); + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt index 2563eaf..768b363 100644 --- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt @@ -213,7 +213,6 @@ } }) } - //TODO 地图选点 1 -> selectLocationLauncher.launch( Intent(context, SelectLocationActivity::class.java) ) diff --git a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt index d7c462b..0f588b5 100644 --- a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt @@ -1,22 +1,19 @@ 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.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.Marker -import com.amap.api.maps.model.MarkerOptions +import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle -import com.amap.api.maps.model.animation.RotateAnimation 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 @@ -24,11 +21,13 @@ import kotlinx.android.synthetic.main.activity_select_location.* -class SelectLocationActivity : KotlinBaseActivity() { +class SelectLocationActivity : KotlinBaseActivity(), AMap.OnMyLocationChangeListener, + OnMapLoadedListener, OnCameraChangeListener { private val kTag = "SelectLocationActivity" + private lateinit var latLng: LatLng private lateinit var aMap: AMap - private lateinit var location: Location + private lateinit var centerMarkerView: CenterMarkerView override fun initLayoutView(): Int = R.layout.activity_select_location @@ -55,77 +54,55 @@ 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))//改变地图的缩放级别 - } + //不许地图随手势倾斜角度 + 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() + centerMarkerView = CenterMarkerView(this) + centerMarkerView.initInfoWindowsView(aMap) } 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}]") - } - } + aMap.setOnMyLocationChangeListener(this) + aMap.setOnMapLoadedListener(this) + aMap.setOnCameraChangeListener(this) rightOperateView.setOnClickListener { val intent = Intent() - intent.putExtra("longitude", location.longitude.toString()) - intent.putExtra("latitude", location.latitude.toString()) + 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) @@ -143,6 +120,7 @@ } override fun onDestroy() { + centerMarkerView.destroy() mapView.onDestroy() super.onDestroy() } diff --git a/app/src/main/res/layout/map_info_window.xml b/app/src/main/res/layout/map_info_window.xml new file mode 100644 index 0000000..b5d2df7 --- /dev/null +++ b/app/src/main/res/layout/map_info_window.xml @@ -0,0 +1,26 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index 981d706..7118bbb 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -405,8 +405,16 @@ GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { if (rCode == 1000) { - locationView.text = - String.format("详细位置: ${result?.regeocodeAddress?.formatAddress}") + val address = result?.regeocodeAddress?.formatAddress + val temp = StringBuilder() + if (address!!.length > 16) { + temp.append(address.substring(0, 14)) + .append("\r\n") + .append(address.substring(16)) + } else { + temp.append(address) + } + locationView.text = String.format("详细位置: $temp") } } diff --git a/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java new file mode 100644 index 0000000..7e110ed --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/utils/CenterMarkerView.java @@ -0,0 +1,131 @@ +package com.casic.smarttube.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.animation.Animation; +import com.amap.api.maps.model.animation.ScaleAnimation; +import com.amap.api.services.core.AMapException; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.casic.smarttube.R; + +public class CenterMarkerView { + + private final Context context; + private Marker centerMarker; + private LatLng latLng; + private GeocodeSearch geocoderSearch; + + public CenterMarkerView(Context context) { + this.context = context; + try { + geocoderSearch = new GeocodeSearch(context); + } catch (AMapException e) { + e.printStackTrace(); + } + } + + public void addCenterMarker(AMap aMap) { + MarkerOptions options = new MarkerOptions(); + //对应Marker.setIcon方法 设置Marker的图片 + options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin)); + //设置infoWindow与锚点的相对位置 + options.anchor(0.5F, 1); + //拿到地图中心点的坐标。 + LatLng latLng = aMap.getCameraPosition().target; + //把中心点的坐标转换成屏幕像素位置 + Point screenPosition = aMap.getProjection().toScreenLocation(latLng); + //在地图上添加Marker并获取到Marker. + centerMarker = aMap.addMarker(options); + //给marker设置像素位置。 + centerMarker.setPositionByPixels(screenPosition.x, screenPosition.y); + centerMarker.setAnchor(0.5F, 1); + } + + public void initInfoWindowsView(AMap aMap) { + aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() { + @Override + public View getInfoWindow(Marker marker) { + View infoWindow = LayoutInflater.from(context).inflate(R.layout.map_info_window, null); + TextView locationView = infoWindow.findViewById(R.id.locationView); + RegeocodeQuery queryParam = new RegeocodeQuery( + new LatLonPoint(latLng.latitude, latLng.longitude), + 200f, + GeocodeSearch.AMAP + ); + geocoderSearch.getFromLocationAsyn(queryParam); + geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int code) { + if (code == 1000) { + //手动换行 + String address = regeocodeResult.getRegeocodeAddress().getFormatAddress(); + StringBuilder temp = new StringBuilder(); + if (address.length() > 20) { + temp.append(address.substring(0, 20)).append("\r\n").append(address.substring(20)); + } else { + temp.append(address); + } + locationView.setText(temp); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } + }); + return infoWindow; + } + + @Override + public View getInfoContents(Marker marker) { + return null; + } + }); + } + + public void showInfoWindow(LatLng latLng) { + this.latLng = latLng; + if (null != centerMarker) { + //缩放动画 + Animation scaleAnimation = new ScaleAnimation(1F, 1F, 0.75F, 1F); + //时间设置短点 + scaleAnimation.setDuration(500); + centerMarker.setAnimation(scaleAnimation); + centerMarker.startAnimation(); + + centerMarker.showInfoWindow(); + } + } + + + public void hideCenterMarkerInfoWindow() { + centerMarker.hideInfoWindow(); + if (null != centerMarker) { + Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.map_pin); + centerMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap)); + } + } + + public void destroy() { + if (null != centerMarker) { + centerMarker.destroy(); + centerMarker.showInfoWindow(); + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt index 2563eaf..768b363 100644 --- a/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/AddDeviceActivity.kt @@ -213,7 +213,6 @@ } }) } - //TODO 地图选点 1 -> selectLocationLauncher.launch( Intent(context, SelectLocationActivity::class.java) ) diff --git a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt index d7c462b..0f588b5 100644 --- a/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt +++ b/app/src/main/java/com/casic/smarttube/view/SelectLocationActivity.kt @@ -1,22 +1,19 @@ 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.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.Marker -import com.amap.api.maps.model.MarkerOptions +import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle -import com.amap.api.maps.model.animation.RotateAnimation 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 @@ -24,11 +21,13 @@ import kotlinx.android.synthetic.main.activity_select_location.* -class SelectLocationActivity : KotlinBaseActivity() { +class SelectLocationActivity : KotlinBaseActivity(), AMap.OnMyLocationChangeListener, + OnMapLoadedListener, OnCameraChangeListener { private val kTag = "SelectLocationActivity" + private lateinit var latLng: LatLng private lateinit var aMap: AMap - private lateinit var location: Location + private lateinit var centerMarkerView: CenterMarkerView override fun initLayoutView(): Int = R.layout.activity_select_location @@ -55,77 +54,55 @@ 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))//改变地图的缩放级别 - } + //不许地图随手势倾斜角度 + 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() + centerMarkerView = CenterMarkerView(this) + centerMarkerView.initInfoWindowsView(aMap) } 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}]") - } - } + aMap.setOnMyLocationChangeListener(this) + aMap.setOnMapLoadedListener(this) + aMap.setOnCameraChangeListener(this) rightOperateView.setOnClickListener { val intent = Intent() - intent.putExtra("longitude", location.longitude.toString()) - intent.putExtra("latitude", location.latitude.toString()) + 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) @@ -143,6 +120,7 @@ } override fun onDestroy() { + centerMarkerView.destroy() mapView.onDestroy() super.onDestroy() } diff --git a/app/src/main/res/layout/map_info_window.xml b/app/src/main/res/layout/map_info_window.xml new file mode 100644 index 0000000..b5d2df7 --- /dev/null +++ b/app/src/main/res/layout/map_info_window.xml @@ -0,0 +1,26 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/map_pin.png b/app/src/main/res/mipmap-xxhdpi/map_pin.png new file mode 100644 index 0000000..674c628 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/map_pin.png Binary files differ