diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 77f6cae560..8853517620 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -79,7 +79,6 @@ diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/marker/PoiWrapper.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/marker/PoiWrapper.java new file mode 100644 index 0000000000..dbaeb372c9 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/marker/PoiWrapper.java @@ -0,0 +1,85 @@ +package com.mogo.module.common.marker; + +/** + * poi信息封装 + * + * @author tongchenfei + */ +public class PoiWrapper { + private int id; + private String poiType; + private int iconRes; + private int iconInfoRes; + private String iconUrl = ""; + // "https://yycp-static-1255510688.cos.ap-beijing.myqcloud.com/defaultUserHeadImg/VN000012.jpg"; + private String iconInfoUrl = ""; + // "http://yycp-static-1255510688.cos.ap-beijing.myqcloud.com/sso-server-image/1596705960869.png"; + private String title = "拥堵"; + + public PoiWrapper(){ + + } + + public PoiWrapper(String poiType, int iconRes,int iconInfoRes, String title) { + this.poiType = poiType; + this.iconRes = iconRes; + this.iconInfoRes = iconInfoRes; + this.title = title; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getPoiType() { + return poiType; + } + + public void setPoiType(String poiType) { + this.poiType = poiType; + } + + public int getIconRes() { + return iconRes; + } + + public void setIconRes(int iconRes) { + this.iconRes = iconRes; + } + + public String getIconUrl() { + return iconUrl; + } + + public void setIconUrl(String iconUrl) { + this.iconUrl = iconUrl; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getIconInfoRes() { + return iconInfoRes; + } + + public void setIconInfoRes(int iconInfoRes) { + this.iconInfoRes = iconInfoRes; + } + + public String getIconInfoUrl() { + return iconInfoUrl; + } + + public void setIconInfoUrl(String iconInfoUrl) { + this.iconInfoUrl = iconInfoUrl; + } +} diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java index c790f05e65..4ffecc4c40 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java @@ -15,9 +15,12 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; +import com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilder; +import com.facebook.drawee.interfaces.DraweeController; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.module.common.entity.MarkerShowEntity; +import com.mogo.module.common.marker.PoiWrapper; import com.mogo.module.service.MarkerServiceHandler; import com.mogo.module.service.R; import com.mogo.service.imageloader.IMogoImageLoaderListener; @@ -39,7 +42,7 @@ public abstract class MapMarkerBaseView extends LinearLayout implements IMarkerV protected Context mContext; protected MogoMarkerOptions mOptions; protected MogoImageView ivUserHead; - protected ImageView ivIcon; + protected MogoImageView ivIcon; protected ImageView ivCar; protected IMogoMarker mMarker; @@ -81,6 +84,48 @@ public abstract class MapMarkerBaseView extends LinearLayout implements IMarkerV } } + protected void loadPoiTypeIcon(String url,int res) { + if ( Looper.myLooper() != Looper.getMainLooper() ) { + UiThreadHandler.post( ()-> loadPoiTypeIconInUiThread(url, res)); + } else { + loadPoiTypeIconInUiThread(url, res); + } + } + + private void loadPoiTypeIconInUiThread(String url,int res) { + if (!url.isEmpty()) { + ivIcon.setPlaceHolder(res); + ivIcon.setFailureHolder(res); + MarkerServiceHandler.getImageloader().displayImage(url, + ivIcon, WindowUtils.dip2px(mContext, 50), WindowUtils.dip2px(mContext, 50), + new IMogoImageLoaderListener() { + @Override + public void onStart() { + + } + + @Override + public void onCompleted(Bitmap bitmap) { + Logger.d(TAG, "loadImageWithMarker loaded."); + // 使用view渲染地图marker,刷新纹理的时候,需要重新用view生成纹理,然后在设置 + if (mMarker != null) { + mMarker.setIcon(fromView(MapMarkerBaseView.this)); + } + } + + @Override + public void onFailure(Exception e) { + Logger.e(TAG, "loadImageWithMarker onFailure."); + } + }); + }else{ + ivIcon.setImageResource(res); + } + if (mMarker != null) { + mMarker.setIcon(fromView(MapMarkerBaseView.this)); + } + } + private void runOnUiThread(final MarkerShowEntity markerShowEntity){ if (!TextUtils.isEmpty(markerShowEntity.getIconUrl())) { MarkerServiceHandler.getImageloader().displayImage(markerShowEntity.getIconUrl(), diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java index b106e6f283..bf3e59126e 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java @@ -16,8 +16,11 @@ import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerPoiTypeEnum; import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; +import com.mogo.module.common.marker.PoiWrapper; import com.mogo.module.service.R; import com.mogo.module.service.ServiceConst; +import com.mogo.utils.glide.GlideApp; +import com.mogo.utils.logger.Logger; /** * author : donghongyu @@ -51,16 +54,19 @@ public class MapMarkerInfoView extends MapMarkerBaseView { updateView( markerShowEntity ); } + @Override protected void initView( Context context ) { LayoutInflater.from( context ).inflate( R.layout.modudle_services_marker_layout_info, this ); ivUserHead = findViewById( R.id.ivUserHead ); - ivIcon = findViewById( R.id.ivIcon ); +// ivIcon = findViewById( R.id.ivIcon ); + ivIcon = findViewById(R.id.ivIcon); clMarkerContent = findViewById( R.id.clMarkerContent ); ivReverseTriangle = findViewById( R.id.ivReverseTriangle ); ivCar = findViewById( R.id.ivCar ); tvMarkerContent = findViewById( R.id.tvMarkerContent ); } + @Override public void updateView( MarkerShowEntity markerShowEntity ) { try { @@ -85,58 +91,15 @@ public class MapMarkerInfoView extends MapMarkerBaseView { ivIcon.setVisibility( View.VISIBLE ); if ( bindObj instanceof MarkerExploreWay && ( ( MarkerExploreWay ) bindObj ).getPoiType() != null ) { - switch ( ( ( MarkerExploreWay ) bindObj ).getPoiType() ) { - case MarkerPoiTypeEnum.GAS_STATION: - ivIcon.setImageResource( R.drawable.icon_map_marker_refuel ); - break; - case MarkerPoiTypeEnum.TRAFFIC_CHECK: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_check2_white ); - break; - case MarkerPoiTypeEnum.ROAD_CLOSED: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_off2_white ); - break; - case MarkerPoiTypeEnum.SHOP_DISCOUNT: - ivIcon.setImageResource( R.drawable.icon_map_marker_shop_discount ); - break; - case MarkerPoiTypeEnum.FOURS_4S: - ivIcon.setImageResource( R.drawable.icon_map_marker_4s ); - break; - case MarkerPoiTypeEnum.FOURS_ROAD_WORK: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_work2_white ); - break; - case MarkerPoiTypeEnum.FOURS_BLOCK_UP: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_up2_white ); - break; - case MarkerPoiTypeEnum.FOURS_PONDING: - ivIcon.setImageResource( R.drawable.icon_map_marker_pondingl2_white ); - break; - case MarkerPoiTypeEnum.FOURS_SHOP_FREE: - ivIcon.setImageResource( R.drawable.icon_map_marker_shop ); - break; - case MarkerPoiTypeEnum.FOURS_FOG: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_dark_frog2_white ); - break; - case MarkerPoiTypeEnum.FOURS_ICE: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_freeze2_white ); - break; - case MarkerPoiTypeEnum.FOURS_PARKING: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_parking2 ); - break; - case MarkerPoiTypeEnum.FOURS_ACCIDENT: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_accident3_white ); - break; - case MarkerPoiTypeEnum.FOURS_NEALY: - ivIcon.setImageResource( R.drawable.icon_map_marker_shear_news ); - break; - case MarkerPoiTypeEnum.FOURS_LIVING: - ivIcon.setImageResource( R.drawable.icon_map_marker_living_white ); - break; - case MarkerPoiTypeEnum.ILLEGAL_PARK_LIVING: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_illegal_park_white ); - break; - default: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_up2_white ); - break; + // 根据poiType获取对应的图片 + String poiType = ((MarkerExploreWay) bindObj).getPoiType(); + PoiWrapper poiWrapper = + MapMarkerManager.getInstance().getWrapperByPoiType(poiType); + if (poiWrapper != null) { + // 加载图片 + loadPoiTypeIcon(poiWrapper.getIconInfoUrl(),poiWrapper.getIconInfoRes()); + }else{ + Logger.e(TAG, "未能根据poiType获取对应poi信息,无法渲染info marker====" + poiType); } } break; @@ -162,6 +125,8 @@ public class MapMarkerInfoView extends MapMarkerBaseView { } } + break; + default: break; } if ( !TextUtils.isEmpty( markerShowEntity.getTextContent() ) ) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index d6830582c0..cd352781d6 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -3,6 +3,7 @@ package com.mogo.module.service.marker; import android.content.Context; import android.graphics.Rect; import android.text.TextUtils; +import android.util.ArrayMap; import android.view.animation.LinearInterpolator; import com.mogo.commons.AbsMogoApplication; @@ -22,9 +23,11 @@ import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerLocation; import com.mogo.module.common.entity.MarkerNoveltyInfo; import com.mogo.module.common.entity.MarkerOnlineCar; +import com.mogo.module.common.entity.MarkerPoiTypeEnum; import com.mogo.module.common.entity.MarkerResponse; import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; +import com.mogo.module.common.marker.PoiWrapper; import com.mogo.module.service.MarkerServiceHandler; import com.mogo.module.service.R; import com.mogo.module.service.ServiceConst; @@ -41,6 +44,8 @@ import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.WorkThreadHandler; import com.mogo.utils.logger.Logger; +import com.mogo.utils.network.utils.GsonUtil; +import com.mogo.utils.storage.SharedPrefsMgr; import org.json.JSONArray; import org.json.JSONException; @@ -107,7 +112,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, mContext = context.getApplicationContext(); mRefreshModel = new RefreshModel( mContext ); - + updateIconWithPoiType(); MarkerServiceHandler.getActionManager().registerBizActionDoneListener( this ); MarkerServiceHandler.getApis().getRegisterCenterApi().registerADASControlStatusChangedListener( TAG, this ); @@ -204,6 +209,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object; markerShowEntity.setChecked( true ); IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() ); + markerView.setMarker(mogoMarker); if ( markerView instanceof OnlineCarMarkerView ) { try { mogoMarker.setIcon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) ); @@ -249,6 +255,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object; markerShowEntity.setChecked( false ); IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() ); + markerView.setMarker(mogoMarker); if ( markerView instanceof OnlineCarMarkerView ) { try { mogoMarker.setIcon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) ); @@ -1025,4 +1032,67 @@ public class MapMarkerManager implements IMogoMarkerClickListener, mLastCheckMarker = null; } } + + private Map poiIconMap = new ArrayMap<>(); + public void updateIconWithPoiType(){ + // 先生成本地默认map + poiIconMap.put(MarkerPoiTypeEnum.GAS_STATION, new PoiWrapper(MarkerPoiTypeEnum.GAS_STATION,R.drawable.icon_map_marker_refuel, + R.drawable.icon_map_marker_refuel, "加油站")); + poiIconMap.put(MarkerPoiTypeEnum.TRAFFIC_CHECK, new PoiWrapper(MarkerPoiTypeEnum.TRAFFIC_CHECK, + R.drawable.icon_map_marker_road_check2,R.drawable.icon_map_marker_road_check2_white, "交通检查")); + poiIconMap.put(MarkerPoiTypeEnum.ROAD_CLOSED, new PoiWrapper(MarkerPoiTypeEnum.ROAD_CLOSED, + R.drawable.icon_map_marker_road_block_off2,R.drawable.icon_map_marker_road_block_off2_white, "封路")); + poiIconMap.put(MarkerPoiTypeEnum.SHOP_DISCOUNT, new PoiWrapper(MarkerPoiTypeEnum.SHOP_DISCOUNT, + R.drawable.icon_map_marker_shop_discount,R.drawable.icon_map_marker_shop_discount, "商场打折")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_4S, new PoiWrapper(MarkerPoiTypeEnum.FOURS_4S, + R.drawable.icon_map_marker_4s,R.drawable.icon_map_marker_4s, "4S店")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_ROAD_WORK, new PoiWrapper(MarkerPoiTypeEnum.FOURS_ROAD_WORK, + R.drawable.icon_map_marker_road_work2,R.drawable.icon_map_marker_road_work2_white, "施工")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_BLOCK_UP, new PoiWrapper(MarkerPoiTypeEnum.FOURS_BLOCK_UP, + R.drawable.icon_map_marker_road_block_up2,R.drawable.icon_map_marker_road_block_up2_white, "拥堵")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_PONDING, new PoiWrapper(MarkerPoiTypeEnum.FOURS_PONDING, + R.drawable.icon_map_marker_pondingl2,R.drawable.icon_map_marker_pondingl2_white, "积水")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_SHOP_FREE, new PoiWrapper(MarkerPoiTypeEnum.FOURS_SHOP_FREE, + R.drawable.icon_map_marker_shop,R.drawable.icon_map_marker_shop, "超时打折")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_FOG, new PoiWrapper(MarkerPoiTypeEnum.FOURS_FOG, + R.drawable.module_service_ic_rc_dark_frog2,R.drawable.module_service_ic_rc_dark_frog2_white, "浓雾")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_ICE, new PoiWrapper(MarkerPoiTypeEnum.FOURS_ICE, + R.drawable.module_service_ic_rc_freeze2,R.drawable.module_service_ic_rc_freeze2_white, "结冰")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_PARKING, new PoiWrapper(MarkerPoiTypeEnum.FOURS_PARKING, + R.drawable.module_service_ic_rc_parking2,R.drawable.module_service_ic_rc_parking2, "停车场")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_ACCIDENT, new PoiWrapper(MarkerPoiTypeEnum.FOURS_ACCIDENT, + R.drawable.module_service_ic_rc_accident3,R.drawable.module_service_ic_rc_accident3_white, "事故")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_NEALY, new PoiWrapper(MarkerPoiTypeEnum.FOURS_NEALY, + R.drawable.icon_map_marker_shear_news,R.drawable.icon_map_marker_shear_news, "身边")); + poiIconMap.put(MarkerPoiTypeEnum.FOURS_LIVING, new PoiWrapper(MarkerPoiTypeEnum.FOURS_LIVING, + R.drawable.icon_map_marker_living,R.drawable.icon_map_marker_living_white, "实时路况")); + poiIconMap.put(MarkerPoiTypeEnum.ILLEGAL_PARK_LIVING, new PoiWrapper(MarkerPoiTypeEnum.ILLEGAL_PARK_LIVING, + R.drawable.module_service_ic_rc_illegal_park,R.drawable.module_service_ic_rc_illegal_park_white, "违章停车")); + // 从sp中获取config属性,将服务端配置内容合并到本地 + String config = SharedPrefsMgr.getInstance(mContext).getString("SHARE_BUTTON_CONFIG", ""); + if (!config.isEmpty()) { + List configWrappers = GsonUtil.arrayFromJson(config, PoiWrapper.class); + if(configWrappers!=null) { + for (PoiWrapper wrapper : configWrappers) { + wrapper.setIconInfoRes(R.drawable.icon_map_marker_road_block_up2_white); + wrapper.setIconRes(R.drawable.icon_map_marker_road_block_up2); + if(poiIconMap.containsKey(wrapper.getPoiType())) { + PoiWrapper defWrapper = poiIconMap.get(wrapper.getPoiType()); + if(defWrapper!=null) { + wrapper.setIconRes(defWrapper.getIconRes()); + wrapper.setIconInfoRes(defWrapper.getIconInfoRes()); + } + } + poiIconMap.put(wrapper.getPoiType(), wrapper); + } + }else{ + Logger.e(TAG, "解析configWrapper异常: " + config); + } + } + } + + public PoiWrapper getWrapperByPoiType(String poiType) { + return poiIconMap.get(poiType); + } + } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java index f9664bcc23..cecd7b4908 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java @@ -10,8 +10,11 @@ import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerPoiTypeEnum; import com.mogo.module.common.entity.MarkerShowEntity; +import com.mogo.module.common.marker.PoiWrapper; import com.mogo.module.service.R; import com.mogo.module.service.ServiceConst; +import com.mogo.utils.glide.GlideApp; +import com.mogo.utils.logger.Logger; /** * author : donghongyu @@ -41,12 +44,14 @@ public class MapMarkerView extends MapMarkerBaseView { updateView( markerShowEntity ); } + @Override protected void initView( Context context ) { LayoutInflater.from( context ).inflate( R.layout.modudle_services_marker_layout, this ); ivIcon = findViewById( R.id.ivIcon ); ivCar = findViewById( R.id.ivCar ); } + @Override public void updateView( MarkerShowEntity markerShowEntity ) { try { Object bindObj = markerShowEntity.getBindObj(); @@ -54,59 +59,20 @@ public class MapMarkerView extends MapMarkerBaseView { case ServiceConst.CARD_TYPE_ROAD_CONDITION: case ServiceConst.CARD_TYPE_NOVELTY: if ( bindObj instanceof MarkerExploreWay && ( ( MarkerExploreWay ) bindObj ).getPoiType() != null ) { - switch ( ( ( MarkerExploreWay ) bindObj ).getPoiType() ) { - case MarkerPoiTypeEnum.GAS_STATION: - ivIcon.setImageResource( R.drawable.icon_map_marker_refuel ); - break; - case MarkerPoiTypeEnum.TRAFFIC_CHECK: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_check2 ); - break; - case MarkerPoiTypeEnum.ROAD_CLOSED: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_off2 ); - break; - case MarkerPoiTypeEnum.SHOP_DISCOUNT: - ivIcon.setImageResource( R.drawable.icon_map_marker_shop_discount ); - break; - case MarkerPoiTypeEnum.FOURS_4S: - ivIcon.setImageResource( R.drawable.icon_map_marker_4s ); - break; - case MarkerPoiTypeEnum.FOURS_ROAD_WORK: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_work2 ); - break; - case MarkerPoiTypeEnum.FOURS_BLOCK_UP: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_up2 ); - break; - case MarkerPoiTypeEnum.FOURS_PONDING: - ivIcon.setImageResource( R.drawable.icon_map_marker_pondingl2 ); - break; - case MarkerPoiTypeEnum.FOURS_SHOP_FREE: - ivIcon.setImageResource( R.drawable.icon_map_marker_shop ); - break; - case MarkerPoiTypeEnum.FOURS_FOG: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_dark_frog2 ); - break; - case MarkerPoiTypeEnum.FOURS_ICE: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_freeze2 ); - break; - case MarkerPoiTypeEnum.FOURS_ACCIDENT: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_accident3 ); - break; - case MarkerPoiTypeEnum.FOURS_NEALY: - ivIcon.setImageResource( R.drawable.icon_map_marker_shear_news ); - break; - case MarkerPoiTypeEnum.FOURS_LIVING: - ivIcon.setImageResource( R.drawable.icon_map_marker_living ); - break; - case MarkerPoiTypeEnum.ILLEGAL_PARK_LIVING: - ivIcon.setImageResource( R.drawable.module_service_ic_rc_illegal_park ); - break; - case MarkerPoiTypeEnum.FOURS_PARKING: - default: - ivIcon.setImageResource( R.drawable.icon_map_marker_road_block_up2 ); - break; + // 根据poiType获取对应的图片 + String poiType = ((MarkerExploreWay) bindObj).getPoiType(); + PoiWrapper poiWrapper = + MapMarkerManager.getInstance().getWrapperByPoiType(poiType); + if (poiWrapper != null) { + // 加载图片 + loadPoiTypeIcon(poiWrapper.getIconUrl(),poiWrapper.getIconRes()); + }else{ + Logger.e(TAG, "未能根据poiType获取对应poi信息,无法渲染marker====" + poiType); } } break; + default: + break; } } catch ( Exception e ) { diff --git a/modules/mogo-module-service/src/main/res/layout/modudle_services_marker_layout.xml b/modules/mogo-module-service/src/main/res/layout/modudle_services_marker_layout.xml index c8b06a6245..d056cf267e 100644 --- a/modules/mogo-module-service/src/main/res/layout/modudle_services_marker_layout.xml +++ b/modules/mogo-module-service/src/main/res/layout/modudle_services_marker_layout.xml @@ -15,7 +15,7 @@ android:background="@drawable/module_services_marker_bkg" android:layout_height="@dimen/module_service_marker_bubble_height"> - - = ArrayMap() + properties["type"] = 9999 + properties["from"] = from + AnalyticsUtils.track("v2x_share_type", properties) + ServiceApisManager.serviceApis.networkApi.create(ShareApiService::class.java, HttpConstant.getNetHost()).sendHelpSignal(param).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SubscribeImpl(RequestOptions.create(context)) { override fun onSuccess(o: BaseData?) { super.onSuccess(o) diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XShareEventsFragment.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XShareEventsFragment.java index d1f9b455a4..bc638a88b4 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XShareEventsFragment.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XShareEventsFragment.java @@ -69,7 +69,6 @@ public class V2XShareEventsFragment extends MvpFragment { close(); }); - mVideoView.setOnClickListener(v -> { - mThumbnailImageView.setVisibility(View.GONE); - if (mVideoView.isPlaying()) { - videoPause(); - } else { - videoResume(); + simpleCoverVideoPlayer.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Log.d(TAG, "onClick啦啦啦啦啦啦啦啦"); + if (simpleCoverVideoPlayer.getCurrentState() == GSYVideoView.CURRENT_STATE_PAUSE) {/*播放中*/ + resume(); + } else { + pause(); + } } }); } + /* + * 开始播放 + * */ + private void startPlayWithVideoUrl(String videoUrl) { + gsyVideoOptionBuilder.setUrl(videoUrl).setCacheWithPlay(false).setPlayTag(TAG) + .build(simpleCoverVideoPlayer); + simpleCoverVideoPlayer.getStartButton().performClick(); + thumbnailImage.setVisibility(View.GONE); + playImageView.setVisibility(View.GONE); + playImageView.setImageResource(R.drawable.v2x_video_pause); + playImageView.setVisibility(View.GONE); + } + + /* + * 暂停 + * */ + private void pause() { + playImageView.setVisibility(View.VISIBLE); + thumbnailImage.setVisibility(View.GONE); + playImageView.setOnClickListener(v -> { + simpleCoverVideoPlayer.onVideoResume(); + }); + thumbnailImage.setOnClickListener(v -> { + simpleCoverVideoPlayer.onVideoResume(); + }); + } + + /* + * 继续 + * */ + private void resume() { + playImageView.setVisibility(View.GONE); + thumbnailImage.setVisibility(View.GONE); + } + + /* + * 播放结束后 + * */ + private void complete(Bitmap firstbitmap, String path) { + thumbnailImage.setVisibility(View.VISIBLE); + thumbnailImage.setImageBitmap(firstbitmap); + playImageView.setImageResource(R.drawable.v2x_icon_event_play); + playImageView.setVisibility(View.VISIBLE); + playImageView.setOnClickListener(v -> { + startPlayWithVideoUrl(path); + }); + thumbnailImage.setOnClickListener(v -> { + startPlayWithVideoUrl(path); + }); + } + @Override public void show(Object entity) { V2XEventShowEntity showEntity = (V2XEventShowEntity) entity; @@ -82,68 +156,110 @@ public class V2XRoadVideoWindow extends RelativeLayout implements IV2XWindow, ID return; } if (path.contains(".mp4")) { - videoViewStartWithPath(path); + startPlayWithVideoUrl(path); + Bitmap firstbitmap = BitmapHelper.getVideoThumbnail(path);/*获取第一帧图*/ - mVideoView.setOnCompletionListener(mediaPlayer -> { - Logger.w(MODULE_NAME, "视频播放结束..."); - videoPlayEnd(path); + simpleCoverVideoPlayer.setVideoAllCallBack(new VideoAllCallBack() { + @Override + public void onAutoComplete(String url, Object... objects) { + complete(firstbitmap, path); + } + + @Override + public void onClickResume(String url, Object... objects) { + thumbnailImage.setVisibility(View.GONE); + playImageView.setVisibility(View.GONE); + } + + @Override + public void onClickStop(String url, Object... objects) { + Log.d(TAG,"onClickStop"); + } + + @Override + public void onStartPrepared(String url, Object... objects) { + Log.d(TAG,"onStartPrepared"); + } + + @Override + public void onPrepared(String url, Object... objects) { + } + + @Override + public void onClickStartIcon(String url, Object... objects) { + } + + @Override + public void onClickStartError(String url, Object... objects) { + } + + @Override + public void onClickStopFullscreen(String url, Object... objects) { + } + + @Override + public void onClickResumeFullscreen(String url, Object... objects) { + } + + @Override + public void onClickSeekbar(String url, Object... objects) { + } + + @Override + public void onClickSeekbarFullscreen(String url, Object... objects) { + } + + @Override + public void onEnterFullscreen(String url, Object... objects) { + } + + @Override + public void onQuitFullscreen(String url, Object... objects) { + } + + @Override + public void onQuitSmallWidget(String url, Object... objects) { + } + + @Override + public void onEnterSmallWidget(String url, Object... objects) { + } + + @Override + public void onTouchScreenSeekVolume(String url, Object... objects) { + } + + @Override + public void onTouchScreenSeekPosition(String url, Object... objects) { + } + + @Override + public void onTouchScreenSeekLight(String url, Object... objects) { + } + + @Override + public void onPlayError(String url, Object... objects) { + } + + @Override + public void onClickStartThumb(String url, Object... objects) { + } + + @Override + public void onClickBlank(String url, Object... objects) { + } + + @Override + public void onClickBlankFullscreen(String url, Object... objects) { + Log.d(TAG, "onClickBlankFullscreen"); + + } }); - } } } - /* - * 视频开始播放 - * */ - private void videoViewStartWithPath(String path) { - mVideoView.setVisibility(VISIBLE); - mVideoView.setVideoPath(path); - mVideoView.setOnPreparedListener(mediaPlayer -> { - mThumbnailImageView.setVisibility(View.GONE); - windowPalyImageView.setVisibility(View.GONE); - }); - mVideoView.start(); - } - - /* - * 视频暂停播放 - * */ - private void videoPause() { - mVideoView.pause(); - windowPalyImageView.setVisibility(View.VISIBLE); - windowPalyImageView.setOnClickListener(v -> { - videoResume(); - }); - } - - /* - * 视频暂停后继续播放 - * */ - private void videoResume() { - mThumbnailImageView.setVisibility(View.INVISIBLE); - mVideoView.resume(); - } - - /* - * 视频播放结束 - * */ - private void videoPlayEnd(String path) { - Bitmap bitmap = BitmapHelper.getVideoThumbnail(path); - mThumbnailImageView.setVisibility(View.VISIBLE); - mThumbnailImageView.setImageBitmap(bitmap); - - windowPalyImageView.setVisibility(View.VISIBLE); - windowPalyImageView.setOnClickListener(v -> { - videoViewStartWithPath(path); - - }); - if (mV2XWindowStatusListener != null) { - mV2XWindowStatusListener.onViewClose(); - } - } - @Override public void close() { //移除窗体 @@ -166,4 +282,14 @@ public class V2XRoadVideoWindow extends RelativeLayout implements IV2XWindow, ID public void destroy() { } + + @Override + public void videoPlayWithVideoUrl(String videoUrl) { + + } + + @Override + public void closeVideoWindow() { + + } } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleCoverVideoPlayer.kt b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleCoverVideoPlayer.kt index 21e8e1a035..d8f2f27e4e 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleCoverVideoPlayer.kt +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleCoverVideoPlayer.kt @@ -1,8 +1,7 @@ -package com.mogo.module.tanlu.video +package com.mogo.module.v2x.view import android.content.Context import android.util.AttributeSet -import android.util.Log import android.view.Surface import android.view.View import android.widget.ImageView @@ -34,11 +33,11 @@ class SimpleCoverVideoPlayer : StandardGSYVideoPlayer { override fun init(context: Context) { super.init(context) - coverImage = findViewById(R.id.thumbnail_image) + coverImage = findViewById(R.id.thumbImage) start = findViewById(R.id.start) fullscreen = findViewById(R.id.fullscreen) if (mThumbImageViewLayout != null - && (mCurrentState == -1 || mCurrentState == GSYVideoView.CURRENT_STATE_NORMAL || mCurrentState == GSYVideoView.CURRENT_STATE_ERROR) + && (mCurrentState == -1 || mCurrentState == GSYVideoView.CURRENT_STATE_NORMAL || mCurrentState == GSYVideoView.CURRENT_STATE_ERROR) ) { mThumbImageViewLayout.visibility = View.VISIBLE } @@ -65,19 +64,27 @@ class SimpleCoverVideoPlayer : StandardGSYVideoPlayer { //加载图片 val requestOptions = RequestOptions() // .placeholder(R.drawable.tanlu_normal_image) - .error(R.drawable.video_loading) + .error(R.drawable.video_loading_img) Glide.with(mContext).asBitmap() - .load(url) - .apply(requestOptions) - .into(SkinAbleBitmapTarget(coverImage, requestOptions)) + .load(url) + .apply(requestOptions) + .into(SkinAbleBitmapTarget(coverImage, requestOptions)) } + /* + * 默认双击暂停 + * */ + override fun onClickUiToggle(){ + super.touchDoubleUp() + } + + override fun updateStartImage() { when (mCurrentState) { -// GSYVideoView.CURRENT_STATE_PLAYING -> start.setImageResource(R.drawable.selector_bg_btn_pause) -// GSYVideoView.CURRENT_STATE_ERROR -> start.setImageResource(R.drawable.main_video_refresh_btn) -// else -> start.setImageResource(R.drawable.selector_bg_btn_play) + GSYVideoView.CURRENT_STATE_PLAYING -> start.setImageResource(R.drawable.v2x_video_pause) +// GSYVideoView.CURRENT_STATE_ERROR -> start.setImageResource(R.drawable.live_error) + else -> start.setImageResource(R.drawable.v2x_icon_event_play) } } @@ -153,7 +160,7 @@ class SimpleCoverVideoPlayer : StandardGSYVideoPlayer { start -> { } - else -> { + else -> { } } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/VideoInit.kt b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/VideoInit.kt index b7962f3acc..d3e9c2c7e6 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/VideoInit.kt +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/VideoInit.kt @@ -1,4 +1,4 @@ -package com.mogo.module.tanlu.video +package com.mogo.module.v2x import com.shuyu.gsyvideoplayer.GSYVideoManager import com.shuyu.gsyvideoplayer.cache.CacheFactory diff --git a/modules/mogo-module-v2x/src/main/res/drawable-ldpi/v2x_video_pause.png b/modules/mogo-module-v2x/src/main/res/drawable-ldpi/v2x_video_pause.png new file mode 100644 index 0000000000..90b401f17f Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-ldpi/v2x_video_pause.png differ diff --git a/modules/mogo-module-v2x/src/main/res/drawable-mdpi/v2x_video_pause.png b/modules/mogo-module-v2x/src/main/res/drawable-mdpi/v2x_video_pause.png new file mode 100644 index 0000000000..90b401f17f Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-mdpi/v2x_video_pause.png differ diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi-1920x1000/v2x_video_pause.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi-1920x1000/v2x_video_pause.png new file mode 100644 index 0000000000..cbd22bb486 Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi-1920x1000/v2x_video_pause.png differ diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_video_pause.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_video_pause.png new file mode 100644 index 0000000000..cbd22bb486 Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_video_pause.png differ diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_road_video.xml b/modules/mogo-module-v2x/src/main/res/layout/window_road_video.xml index d43b868146..0eebfbca02 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/window_road_video.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/window_road_video.xml @@ -1,57 +1,81 @@ + android:layout_height="match_parent"> - + android:gravity="center"> - + - + - - - + android:scaleType="centerCrop" /> - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml b/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml new file mode 100644 index 0000000000..ec3e8626d3 --- /dev/null +++ b/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/imageloader/glide/GlideImageLoader.java b/services/mogo-service/src/main/java/com/mogo/service/impl/imageloader/glide/GlideImageLoader.java index 3fdf131786..077fdf0c7e 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/imageloader/glide/GlideImageLoader.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/imageloader/glide/GlideImageLoader.java @@ -134,20 +134,20 @@ public class GlideImageLoader implements IMogoImageloader { .into( new SimpleTarget< Bitmap >() { @Override public void onResourceReady( @NonNull Bitmap resource, @Nullable Transition< ? super Bitmap > transition ) { + imageView.setImageResource( 0 ); + imageView.setImageBitmap( resource ); if ( listener != null ) { listener.onCompleted( resource ); } - imageView.setImageResource( 0 ); - imageView.setImageBitmap( resource ); } @Override public void onLoadStarted( @Nullable Drawable placeholder ) { super.onLoadStarted( placeholder ); + imageView.setImageResource( imageView.getPlaceHolder() ); if ( listener != null ) { listener.onStart(); } - imageView.setImageResource( imageView.getPlaceHolder() ); } @Override @@ -159,10 +159,10 @@ public class GlideImageLoader implements IMogoImageloader { @Override public void onLoadFailed( @Nullable Drawable errorDrawable ) { super.onLoadFailed( errorDrawable ); + imageView.setImageResource( imageView.getFailureHolder() ); if ( listener != null ) { listener.onFailure( new Exception( "onLoadFailed" ) ); } - imageView.setImageResource( imageView.getFailureHolder() ); } } ); }