修改故障求助marker显示实现方式
修改自车图标设置实现
This commit is contained in:
@@ -1,18 +1,25 @@
|
||||
package com.mogo.map.impl.amap;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.location.Location;
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.os.SystemClock;
|
||||
import android.os.Trace;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.animation.Interpolator;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.amap.api.maps.AMap;
|
||||
import com.amap.api.maps.AMapUtils;
|
||||
@@ -32,7 +39,9 @@ import com.amap.api.navi.AMapNaviViewListener;
|
||||
import com.amap.api.navi.AMapNaviViewOptions;
|
||||
import com.amap.api.navi.enums.AMapNaviViewShowMode;
|
||||
import com.amap.api.navi.model.NaviInfo;
|
||||
import com.mogo.commons.debug.DebugConfig;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.bumptech.glide.request.target.SimpleTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.mogo.map.IMogoMap;
|
||||
import com.mogo.map.IMogoMapView;
|
||||
import com.mogo.map.MogoLatLng;
|
||||
@@ -51,8 +60,11 @@ import com.mogo.map.uicontroller.EnumMapUI;
|
||||
import com.mogo.map.uicontroller.IMogoMapUIController;
|
||||
import com.mogo.map.uicontroller.MapCameraPosition;
|
||||
import com.mogo.map.uicontroller.MapControlResult;
|
||||
import com.mogo.utils.UiThreadHandler;
|
||||
import com.mogo.utils.WindowUtils;
|
||||
import com.mogo.utils.glide.GlideApp;
|
||||
import com.mogo.utils.logger.Logger;
|
||||
import com.mogo.utils.storage.SharedPrefsMgr;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -122,6 +134,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
// 设置路线相关的配置属性,如:路线的路况颜色,路线上是否显示摄像头气泡等。
|
||||
// options.setRouteOverlayOptions( MapStyleUtils.getRouteOverlayOptions() );
|
||||
// 设置自车的图片对象
|
||||
checkDefaultOption();
|
||||
options.setCarBitmap( BitmapFactory.decodeResource( getContext().getResources(), DEFAULT_OPTION.getNaviCursorRes() ) );
|
||||
// 设置指南针图标否在导航界面显示,默认显示。true,显示;false,隐藏。
|
||||
options.setCompassEnabled( false );
|
||||
@@ -525,9 +538,12 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isVisible = false;
|
||||
|
||||
@Override
|
||||
public void showMyLocation( boolean visible ) {
|
||||
Logger.d( TAG, "showMyLocation1 %s", visible );
|
||||
isVisible = visible;
|
||||
if ( visible && NaviClient.getInstance( getContext() ).isNaviing() ) {
|
||||
return;
|
||||
}
|
||||
@@ -543,11 +559,12 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
} else {
|
||||
style.myLocationType( MyLocationStyle.LOCATION_TYPE_FOLLOW );
|
||||
}
|
||||
mMapView.getMap().setMyLocationStyle( style );
|
||||
if ( visible ) {
|
||||
// 强制刷新一遍车标
|
||||
style.myLocationIcon( BitmapDescriptorFactory.fromResource( mCarCursorOption.getCarCursorRes() ) );
|
||||
setCarCursorOption(null);
|
||||
// style.myLocationIcon( BitmapDescriptorFactory.fromResource( mCarCursorOption.getCarCursorRes() ) );
|
||||
}
|
||||
mMapView.getMap().setMyLocationStyle( style );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -911,18 +928,39 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
return mIsCarLocked;
|
||||
}
|
||||
|
||||
private String myLocationConfigCache = null;
|
||||
private boolean isUseDefaultOption = false;
|
||||
|
||||
private void checkDefaultOption(){
|
||||
String myLocationConfig = SharedPrefsMgr.getInstance(getContext()).getString(
|
||||
"MY_LOCATION_CONFIG", "");
|
||||
if (myLocationConfigCache == null || !myLocationConfigCache.equals(myLocationConfig)) {
|
||||
// 内存缓存的地址为空,或者内存缓存的地址和sp保存的config不一致,那得重新获取bitmap
|
||||
myLocationConfigCache = myLocationConfig;
|
||||
loadMyLocationIcon(myLocationConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCarCursorOption( CarCursorOption option ) {
|
||||
if (!isVisible) {
|
||||
// 当前自车图标没有显示,所以先不走下面的流程
|
||||
return;
|
||||
}
|
||||
if ( mCarCursorOption != null && mCarCursorOption != DEFAULT_OPTION ) {
|
||||
mCarCursorOption.destroy();
|
||||
}
|
||||
checkDefaultOption();
|
||||
if ( option != null ) {
|
||||
try {
|
||||
isUseDefaultOption = false;
|
||||
mCarCursorOption = option.clone();
|
||||
} catch ( Exception e ) {
|
||||
isUseDefaultOption = true;
|
||||
mCarCursorOption = DEFAULT_OPTION;
|
||||
}
|
||||
} else {
|
||||
isUseDefaultOption = true;
|
||||
mCarCursorOption = DEFAULT_OPTION;
|
||||
}
|
||||
if ( !checkAMapView() ) {
|
||||
@@ -981,4 +1019,55 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
mMapView.getMap().moveCamera( CameraUpdateFactory.changeBearing( bearing ) );
|
||||
}
|
||||
}
|
||||
|
||||
protected void loadMyLocationIcon(String url) {
|
||||
if ( Looper.myLooper() != Looper.getMainLooper() ) {
|
||||
UiThreadHandler.post( ()-> loadMyLocationIconInUiThread(url));
|
||||
} else {
|
||||
loadMyLocationIconInUiThread(url);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadMyLocationIconInUiThread(String url) {
|
||||
|
||||
if (!url.isEmpty()) {
|
||||
RequestOptions options = new RequestOptions()
|
||||
.placeholder( DEFAULT_OPTION.getCarCursorRes() )
|
||||
.error( DEFAULT_OPTION.getCarCursorRes() )
|
||||
.dontAnimate();
|
||||
GlideApp.with( getContext() )
|
||||
.asBitmap()
|
||||
.load( url )
|
||||
.apply( options )
|
||||
.into( new SimpleTarget< Bitmap >() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition< ? super Bitmap > transition ) {
|
||||
if (isUseDefaultOption) {
|
||||
DEFAULT_OPTION.setCarCursorBmp(inflateMyLocation(resource));
|
||||
setCarCursorOption(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadStarted( @Nullable Drawable placeholder ) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared( @Nullable Drawable placeholder ) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFailed( @Nullable Drawable errorDrawable ) {
|
||||
}
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
private Bitmap inflateMyLocation(Bitmap res) {
|
||||
View root =
|
||||
LayoutInflater.from(getContext()).inflate(R.layout.module_map_amap_my_location, null, false);
|
||||
ImageView iv = root.findViewById(R.id.module_map_amap_my_location_iv);
|
||||
iv.setImageBitmap(res);
|
||||
return BitmapDescriptorFactory.fromView(root).getBitmap();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/module_map_amap_my_location_iv"
|
||||
android:layout_width="@dimen/module_map_amap_my_location_size"
|
||||
android:layout_height="@dimen/module_map_amap_my_location_size" />
|
||||
</FrameLayout>
|
||||
4
libraries/map-amap/src/main/res/values-xhdpi/dimens.xml
Normal file
4
libraries/map-amap/src/main/res/values-xhdpi/dimens.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="module_map_amap_my_location_size">370px</dimen>
|
||||
</resources>
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="path_width">60px</dimen>
|
||||
<dimen name="module_map_amap_my_location_size">146px</dimen>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user