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