Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
1
.idea/gradle.xml
generated
1
.idea/gradle.xml
generated
@@ -79,7 +79,6 @@
|
||||
</set>
|
||||
</option>
|
||||
<option name="resolveModulePerSourceSet" value="false" />
|
||||
<option name="useQualifiedModuleNames" value="true" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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(),
|
||||
|
||||
@@ -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() ) ) {
|
||||
|
||||
@@ -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<String, PoiWrapper> 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<PoiWrapper> 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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 ) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
android:background="@drawable/module_services_marker_bkg"
|
||||
android:layout_height="@dimen/module_service_marker_bubble_height">
|
||||
|
||||
<ImageView
|
||||
<com.mogo.service.imageloader.MogoImageView
|
||||
android:id="@+id/ivIcon"
|
||||
android:layout_width="@dimen/module_service_marker_bubble_icon_width"
|
||||
android:layout_height="@dimen/module_service_marker_bubble_icon_height"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
app:miv_placeHolder="@drawable/icon_default_user_head"
|
||||
app:miv_shape="circle" />
|
||||
|
||||
<ImageView
|
||||
<com.mogo.service.imageloader.MogoImageView
|
||||
android:id="@+id/ivIcon"
|
||||
android:layout_width="@dimen/module_service_marker_bubble_icon_width"
|
||||
android:layout_height="@dimen/module_service_marker_bubble_icon_height"
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant;
|
||||
import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener;
|
||||
import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager;
|
||||
import com.mogo.module.common.dialog.BaseFloatDialog;
|
||||
import com.mogo.module.service.marker.MapMarkerManager;
|
||||
import com.mogo.module.share.bean.FixableButton;
|
||||
import com.mogo.module.share.bean.ShareButtonConfigResponse;
|
||||
import com.mogo.module.share.bean.ShareConfigRequest;
|
||||
@@ -477,6 +478,7 @@ public class ShareControl implements IMogoShareManager, Handler.Callback {
|
||||
}
|
||||
Logger.d(TAG, "获取分享框配置成功: " + config);
|
||||
SharedPrefsMgr.getInstance(mContext).putString(KEY_SHARE_CONFIG, config);
|
||||
MapMarkerManager.getInstance().updateIconWithPoiType();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -42,7 +42,7 @@ class VoiceCmdService:Service() {
|
||||
if (intent.getIntExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY,0) == ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP) {
|
||||
// 收到语音指令,准备上报求助
|
||||
Logger.i(TAG, "收到语音指令,准备上报求助")
|
||||
SeekHelpManager.seekHelp(this,seekListener)
|
||||
SeekHelpManager.seekHelp(this,seekListener,"2")
|
||||
}
|
||||
}
|
||||
return super.onStartCommand(intent, flags, startId)
|
||||
|
||||
@@ -63,7 +63,7 @@ class GridFixableShareDialog(context: Context) : BaseFloatDialog(context) {
|
||||
if (it.poiType == IMogoTanluProvider.TYPE_SEEK_HELP) {
|
||||
// 发起故障求助
|
||||
Logger.d(TAG, "发起故障求助====")
|
||||
seekHelp(context, seekListener, true)
|
||||
seekHelp(context, seekListener, "1", true)
|
||||
} else {
|
||||
// 上报道路事件
|
||||
Logger.d(TAG, "上报道路事件=====")
|
||||
|
||||
@@ -161,7 +161,7 @@ public class LaucherShareDialog extends BaseFloatDialog implements View.OnClickL
|
||||
} else if (id == R.id.ivSeekHelp) {
|
||||
// 故障求助
|
||||
Logger.d(TAG,"点击求助");
|
||||
SeekHelpManager.INSTANCE.seekHelp(mContext,seekListener,true);
|
||||
SeekHelpManager.INSTANCE.seekHelp(mContext, seekListener, "1", true);
|
||||
dismiss();
|
||||
} else if (id == R.id.ivAccident) {
|
||||
// 事故
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.mogo.module.share.manager
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.os.SystemClock
|
||||
import android.util.ArrayMap
|
||||
import com.mogo.commons.analytics.AnalyticsUtils
|
||||
import com.mogo.commons.data.BaseData
|
||||
import com.mogo.commons.network.SubscribeImpl
|
||||
import com.mogo.commons.network.Utils
|
||||
@@ -61,7 +63,7 @@ object SeekHelpManager {
|
||||
Logger.d(TAG, "onSpeakEnd: $it")
|
||||
if (it == VOICE_WILL_SEEK_HELP) {
|
||||
// 请求帮助语音播放完成,开始真正寻求帮助
|
||||
realSeekHelp()
|
||||
realSeekHelp("1")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,8 +78,10 @@ object SeekHelpManager {
|
||||
* 由于当前需求仅需要提供这一个方法,所以context的初始化放到了此方法,后面如果有增加,需要把这部分提出去
|
||||
*
|
||||
* @param useLocalVoiceNotice 使用自己的语音播报,如果是从语音助手过来的请求,语音助手可能会走自己的播报,默认是使用自己的播报
|
||||
*
|
||||
* @param from 1 - 手动发起求助 2 - 语音发起求助
|
||||
*/
|
||||
fun seekHelp(context: Context, seekHelpListener: ISeekHelpListener, useLocalVoiceNotice: Boolean = true) {
|
||||
fun seekHelp(context: Context, seekHelpListener: ISeekHelpListener,from:String = "1", useLocalVoiceNotice: Boolean = true) {
|
||||
Logger.d(TAG, "seekHelp: $isSeeking")
|
||||
if(!isSeeking) {
|
||||
isSeeking = true
|
||||
@@ -110,10 +114,10 @@ object SeekHelpManager {
|
||||
// 语音说完再请求,要不然可能请求的太快
|
||||
Logger.d(TAG, "使用本地播报: $aiAssist")
|
||||
aiAssist?.speakTTSVoice(VOICE_WILL_SEEK_HELP)
|
||||
realSeekHelp()
|
||||
realSeekHelp(from)
|
||||
} else {
|
||||
Logger.d(TAG, "不使用本地语音播报,直接开始发起求助")
|
||||
realSeekHelp()
|
||||
realSeekHelp(from)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -149,12 +153,17 @@ object SeekHelpManager {
|
||||
/**
|
||||
* 真正开始寻求帮助,实际就是请求接口
|
||||
*/
|
||||
private fun realSeekHelp() {
|
||||
private fun realSeekHelp(from:String) {
|
||||
Logger.d(TAG, "realSeekHelp")
|
||||
// 请求故障求助接口
|
||||
val seekRequest = SeekRequest(Utils.getSn())
|
||||
val param = mutableMapOf("data" to seekRequest.getJson())
|
||||
|
||||
val properties: MutableMap<String, Any> = 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<BaseData>(RequestOptions.create(context)) {
|
||||
override fun onSuccess(o: BaseData?) {
|
||||
super.onSuccess(o)
|
||||
|
||||
@@ -69,7 +69,6 @@ public class V2XShareEventsFragment extends MvpFragment<V2XShareEventsFragment,
|
||||
new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
|
||||
recyclerView.setLayoutManager(linearLayoutManager);
|
||||
loadingView = mRootView.findViewById(R.id.network_loading_imageview);
|
||||
|
||||
}
|
||||
|
||||
private void initData() {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.mogo.module.v2x.listener;
|
||||
|
||||
public interface VideoAdapterCallBack {
|
||||
/*
|
||||
* 道路视频播放
|
||||
* */
|
||||
void videoPlayWithVideoUrl(String videoUrl);
|
||||
|
||||
void closeVideoWindow();
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.mogo.module.v2x.scenario.scene.road;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
@@ -15,24 +16,37 @@ import com.mogo.module.common.entity.V2XRoadEventEntity;
|
||||
import com.mogo.module.v2x.R;
|
||||
import com.mogo.module.v2x.V2XServiceManager;
|
||||
import com.mogo.module.v2x.listener.V2XWindowStatusListener;
|
||||
import com.mogo.module.v2x.listener.VideoAdapterCallBack;
|
||||
import com.mogo.module.v2x.scenario.view.IV2XWindow;
|
||||
import com.mogo.module.v2x.view.TextureVideoView;
|
||||
import com.mogo.module.v2x.view.SimpleCoverVideoPlayer;
|
||||
import com.mogo.utils.BitmapHelper;
|
||||
import com.mogo.utils.logger.Logger;
|
||||
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
|
||||
import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack;
|
||||
import com.shuyu.gsyvideoplayer.utils.GSYVideoType;
|
||||
import com.shuyu.gsyvideoplayer.video.base.GSYVideoView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
|
||||
import static com.mogo.module.v2x.VideoInitKt.initVideo;
|
||||
import static com.shuyu.gsyvideoplayer.utils.GSYVideoType.SCREEN_MATCH_FULL;
|
||||
|
||||
|
||||
public class V2XRoadVideoWindow extends RelativeLayout implements IV2XWindow, IDestroyable {
|
||||
/*
|
||||
https://github.com/CarGuo/GSYVideoPlayer/tree/master/doc SimpleCoverVideoPlayer文档
|
||||
* */
|
||||
public class V2XRoadVideoWindow extends RelativeLayout implements IV2XWindow, IDestroyable, VideoAdapterCallBack {
|
||||
|
||||
private static final String TAG = "V2XRoadVideoWindow";
|
||||
private V2XWindowStatusListener mV2XWindowStatusListener;
|
||||
private TextureVideoView mVideoView;
|
||||
private ImageView playImageView;
|
||||
private ImageView thumbnailImage;
|
||||
private ImageView closeImage;
|
||||
private ImageView mThumbnailImageView;
|
||||
private ImageView windowPalyImageView;
|
||||
|
||||
|
||||
private SimpleCoverVideoPlayer simpleCoverVideoPlayer;
|
||||
private Context mContext;
|
||||
|
||||
private GSYVideoOptionBuilder gsyVideoOptionBuilder = new GSYVideoOptionBuilder();
|
||||
|
||||
|
||||
public V2XRoadVideoWindow() {
|
||||
this(V2XServiceManager.getContext(), null);
|
||||
@@ -40,36 +54,96 @@ public class V2XRoadVideoWindow extends RelativeLayout implements IV2XWindow, ID
|
||||
|
||||
public V2XRoadVideoWindow(Context context) {
|
||||
this(context, null);
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
public V2XRoadVideoWindow(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
public V2XRoadVideoWindow(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
initView(context);
|
||||
mContext = context;
|
||||
initView(mContext);
|
||||
}
|
||||
|
||||
private void initView(Context context) {
|
||||
LayoutInflater.from(context).inflate(R.layout.window_road_video, this);
|
||||
mVideoView = findViewById(R.id.roadVideoView);/*播放器*/
|
||||
windowPalyImageView = findViewById(R.id.window_video_play);/*播放键*/
|
||||
mThumbnailImageView = findViewById(R.id.thumbnail_image);/*第一帧图片*/
|
||||
closeImage = findViewById(R.id.roadVideoClose);
|
||||
LayoutInflater.from(mContext).inflate(R.layout.window_road_video_layout, this);
|
||||
initVideo();
|
||||
playImageView = this.findViewById(R.id.window_video_play);
|
||||
thumbnailImage = this.findViewById(R.id.thumbnail_image);
|
||||
simpleCoverVideoPlayer = this.findViewById(R.id.roadVideoView);
|
||||
GSYVideoType.setShowType(SCREEN_MATCH_FULL);
|
||||
|
||||
closeImage = this.findViewById(R.id.roadVideoClose);
|
||||
closeImage.setOnClickListener(v -> {
|
||||
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() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 817 B |
Binary file not shown.
|
After Width: | Height: | Size: 817 B |
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
@@ -1,57 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/window_road_video"
|
||||
android:id="@+id/item_video_cover"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#99000000"
|
||||
android:paddingStart="@dimen/module_main_v2x_animation_width">
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.mogo.module.v2x.view.RoundLayout
|
||||
android:id="@+id/rlRoadEventList"
|
||||
<RelativeLayout
|
||||
android:id="@+id/surface_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="@dimen/dp_30"
|
||||
app:roundLayoutRadius="@dimen/dp_28">
|
||||
android:gravity="center">
|
||||
|
||||
<com.mogo.module.v2x.view.TextureVideoView
|
||||
android:id="@+id/roadVideoView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/live_video_progress_bar_loading_color"
|
||||
android:clickable="false"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
</RelativeLayout>
|
||||
|
||||
</com.mogo.module.v2x.view.TextureVideoView>
|
||||
<RelativeLayout
|
||||
android:id="@+id/thumb"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentBottom="true">
|
||||
|
||||
<com.mogo.service.imageloader.MogoImageView
|
||||
android:id="@+id/thumbnail_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/v2x_bg_big_image_dark"
|
||||
android:visibility="gone"
|
||||
android:scaleType="fitXY"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<ImageView
|
||||
android:id="@+id/window_video_play"
|
||||
android:layout_width="@dimen/dp_100"
|
||||
android:layout_height="@dimen/dp_100"
|
||||
android:id="@+id/thumbImage"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:visibility="gone"
|
||||
android:src="@drawable/v2x_icon_event_play"/>
|
||||
</com.mogo.module.v2x.view.RoundLayout>
|
||||
<ImageView
|
||||
android:id="@+id/roadVideoClose"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignTop="@+id/rlRoadEventList"
|
||||
android:layout_alignRight="@+id/rlRoadEventList"
|
||||
android:src="@drawable/v2x_panel_close" />
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<!--局部播放器-->
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_bottom"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_marginBottom="@dimen/dp_260"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/progress"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@null"
|
||||
android:max="100"
|
||||
android:maxHeight="@dimen/dp_6"
|
||||
android:minHeight="@dimen/dp_6"
|
||||
android:thumb="@null"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fullscreen"
|
||||
android:layout_width="60px"
|
||||
android:layout_height="60px"
|
||||
android:scaleType="centerInside" />
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/start"
|
||||
android:layout_width="@dimen/dp_100"
|
||||
android:layout_height="@dimen/dp_100"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/loading"
|
||||
android:layout_width="@dimen/dp_56"
|
||||
android:layout_height="@dimen/dp_56"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:indeterminateDrawable="@drawable/video_loading_bg"
|
||||
android:visibility="gone" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#00000000"
|
||||
android:paddingStart="@dimen/module_main_v2x_animation_width">
|
||||
|
||||
<com.mogo.module.v2x.view.RoundLayout
|
||||
android:id="@+id/rlRoadEventList"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_674"
|
||||
android:layout_marginLeft="@dimen/dp_30"
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
android:layout_marginRight="@dimen/dp_30"
|
||||
android:layout_marginBottom="@dimen/dp_327"
|
||||
android:background="#D9FFFFFF"
|
||||
app:roundLayoutRadius="@dimen/dp_28">
|
||||
|
||||
<com.mogo.module.v2x.view.SimpleCoverVideoPlayer
|
||||
android:id="@+id/roadVideoView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_674"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:clickable="true" />
|
||||
|
||||
<com.mogo.service.imageloader.MogoImageView
|
||||
android:id="@+id/thumbnail_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/v2x_bg_big_image_dark"
|
||||
android:scaleType="fitXY"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/window_video_play"
|
||||
android:layout_width="@dimen/dp_100"
|
||||
android:layout_height="@dimen/dp_100"
|
||||
android:layout_centerInParent="true"
|
||||
android:src="@drawable/v2x_icon_event_play"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/roadVideoClose"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/dp_20"
|
||||
android:layout_marginTop="@dimen/dp_20"
|
||||
android:src="@drawable/v2x_panel_close" />
|
||||
</com.mogo.module.v2x.view.RoundLayout>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -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() );
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user