From 7da4d64630b0e63997e07ea2c041c4ffbc994516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Mon, 14 Dec 2020 21:06:25 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E8=87=AA?= =?UTF-8?q?=E7=A0=94=E5=9C=B0=E5=9B=BE=E5=A1=AB=E5=85=85=E5=B0=8F=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=EF=BC=8C=E4=BD=86=E6=98=AF=E5=9C=86=E5=BD=A2=E5=A4=B1?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/codeStyles/Project.xml | 15 ++++- .../small/map/SmallMapDelegateFactory.java | 66 +++++++++++++++++++ .../module/small/map/SmallMapService.java | 4 +- .../mogo/module/small/map/SmallMapView.java | 51 ++++++++++++++ .../main/res/layout/module_small_map_view.xml | 27 ++++++-- .../src/main/res/values-xhdpi/dimens.xml | 19 +++--- 6 files changed, 163 insertions(+), 19 deletions(-) create mode 100644 modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDelegateFactory.java diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 663459aa50..0d156937bb 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -3,9 +3,18 @@ + diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDelegateFactory.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDelegateFactory.java new file mode 100644 index 0000000000..962be7d52f --- /dev/null +++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDelegateFactory.java @@ -0,0 +1,66 @@ +package com.mogo.module.small.map; + +import android.content.Context; + +import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.map.IMogoMapApiBuilder; +import com.mogo.map.IMogoMapView; +import com.mogo.map.impl.automap.navi.AutoNaviClient; +import com.mogo.map.location.IMogoLocationClient; +import com.mogo.map.navi.IMogoAimless; +import com.mogo.map.navi.IMogoNavi; +import com.mogo.map.search.drive.IMogoRoadSearch; +import com.mogo.map.search.geo.IMogoGeoSearch; +import com.mogo.map.search.inputtips.IMogoInputtipsSearch; +import com.mogo.map.search.inputtips.query.MogoInputtipsQuery; +import com.mogo.map.search.poisearch.IMogoPoiSearch; +import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; +import com.mogo.map.search.traffic.IMogoTrafficSearch; +import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.utils.AppUtils; + +/** + * @author donghongyu + * @since 2020/12/14 + *

+ * 描述 + */ +class SmallMapDelegateFactory { + + private static final String TAG = "MogoMapDelegateFactory"; + + private static IMogoMapApiBuilder sApiBuilder; + + private static IMogoMapApiBuilder getApiBuilder() { + if ( sApiBuilder == null ) { + synchronized ( SmallMapDelegateFactory.class ) { + if ( sApiBuilder == null ) { + sApiBuilder = ARouter.getInstance().navigation( IMogoMapApiBuilder.class ); + } + } + } + return sApiBuilder; + } + + + public static IMogoAimless getAimless( Context context ) { + return getApiBuilder().getAimless( context ); + } + + public static void createMapViewInstance( Context context ) { + getApiBuilder().createMapView( context ); + } + + public static void destroy() { + getApiBuilder().destroy(); + } + + public static IMogoMapView getMapView(Context context ) { + return getApiBuilder().getMapView( context ); + } + + public static IMogoTrafficSearch getTrafficSearch() { + return getApiBuilder().getTrafficSearch(); + } +} diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapService.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapService.java index de26ba6776..bdf5c46fa9 100644 --- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapService.java +++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapService.java @@ -79,8 +79,8 @@ public class SmallMapService extends Service { WindowManager.LayoutParams.WRAP_CONTENT ) .position( - getResources().getDimensionPixelOffset(R.dimen.module_mvision_view_x), - getResources().getDimensionPixelOffset(R.dimen.module_mvision_view_y) + getResources().getDimensionPixelOffset(R.dimen.module_small_map_view_x), + getResources().getDimensionPixelOffset(R.dimen.module_small_map_view_y) ) .gravity(Gravity.TOP | Gravity.LEFT) .showInWindowManager(); diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java index 62e75cdc07..139eb28c22 100644 --- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java +++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java @@ -1,7 +1,11 @@ package com.mogo.module.small.map; import android.content.Context; +import android.os.Bundle; import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; import androidx.annotation.Nullable; @@ -31,5 +35,52 @@ public class SmallMapView extends MogoBaseMapView { @Override protected void addMapView(Context context) { Logger.d(TAG, "addMapView"); + mMapView = SmallMapDelegateFactory.getMapView(context); + if (mMapView != null) { + final View mapView = mMapView.getMapView(); + if (mapView != null) { + addView(mapView, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + } else { + Logger.e(TAG, "create MapView instance failed."); + } + } else { + Logger.e(TAG, "create IMogoMapView instance failed."); + } } + + + @Override + public void onCreate( Bundle bundle ) { + super.onCreate( bundle ); + Logger.d( TAG, "onCreate" ); + } + + @Override + public void onResume() { + super.onResume(); + Logger.d( TAG, "onResume" ); + } + + @Override + public void onPause() { + super.onPause(); + Logger.d( TAG, "onPause" ); + } + + @Override + public void onDestroy() { + super.onDestroy(); + Logger.d( TAG, "onDestroy" ); + } + + @Override + public void onSaveInstanceState( Bundle outState ) { + super.onSaveInstanceState( outState ); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + } + } \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml b/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml index e5d1dbfe79..346805d461 100644 --- a/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml +++ b/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml @@ -1,16 +1,31 @@ + + + + + + - \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml index 9910274622..41d38e65b4 100644 --- a/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml @@ -1,12 +1,15 @@ - 400px - 400px - 1490px - 650px + 400px + 400px - 0px - 0px - 1920px - 1080px + 300px + 300px + 1490px + 650px + + 0px + 0px + 1920px + 1080px \ No newline at end of file From f26b8df8387ca03509047293966a9c264a4f04f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 15 Dec 2020 10:24:31 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E9=AB=98=E5=BE=B7=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E7=9A=84=E5=B0=8F=E5=9C=B0=E5=9B=BE=E6=97=A0=E6=B3=95=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/module/small/map/SmallVisionProvider.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java index 0e3a5be274..a1d8f9c769 100644 --- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java +++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java @@ -74,16 +74,19 @@ public class SmallVisionProvider implements IMogoSmallMapProvider, IMogoStatusCh public void showPanel() { Log.d(TAG, "小地图模块触发展示……"); - mSmallMapServiceIntent = new Intent(mContext, SmallMapService.class); - mContext.startService(mSmallMapServiceIntent); + if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { + mSmallMapServiceIntent = new Intent(mContext, SmallMapService.class); + mContext.startService(mSmallMapServiceIntent); + } } @Override public void hidePanel() { Log.d(TAG, "小地图模块触发隐藏……"); - - if (mSmallMapServiceIntent != null) { - AbsMogoApplication.getApp().stopService(mSmallMapServiceIntent); + if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { + if (mSmallMapServiceIntent != null) { + AbsMogoApplication.getApp().stopService(mSmallMapServiceIntent); + } } } From dd8584494f1e4d5d0021578d19a3d4ecc0a716ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 15 Dec 2020 11:51:07 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=86=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E7=8E=AF=E5=A2=83=E6=8E=A8=E9=80=81tts=20Bug=20http:/?= =?UTF-8?q?/h5service.zhidaohulian.com/v2x=5FremoteControl/#/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2x/scenario/scene/animation/V2XAnimationWindow.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationWindow.java index c77d966c31..0a3fe0121c 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationWindow.java @@ -106,6 +106,9 @@ public class V2XAnimationWindow extends ConstraintLayout implements IV2XWindow Date: Tue, 15 Dec 2020 20:58:35 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BD=BF=E7=94=A8=20ht?= =?UTF-8?q?tp://blog.yeyanxiang.cn/Android/notes/android/surfaceview-corne?= =?UTF-8?q?r/=20=E8=A7=A3=E5=86=B3=E5=9C=B0=E5=9B=BE=E5=9C=86=E5=BD=A2?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BD=86=E6=98=AF=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 5 +-- .../mogo/module/small/map/SmallMapView.java | 5 +++ .../module/small/map/SmallVisionProvider.java | 7 +--- .../map/TextureVideoViewOutlineProvider.java | 35 ++++++++++++++++++ .../module_small_map_view_border.png | Bin 28791 -> 29440 bytes .../main/res/layout/module_small_map_view.xml | 2 - 6 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/TextureVideoViewOutlineProvider.java diff --git a/.idea/misc.xml b/.idea/misc.xml index f4d5deeca6..e082ea7475 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,10 +4,7 @@ - + - - \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java index 139eb28c22..32b0bddc35 100644 --- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java +++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java @@ -1,6 +1,7 @@ package com.mogo.module.small.map; import android.content.Context; +import android.os.Build; import android.os.Bundle; import android.util.AttributeSet; import android.view.View; @@ -8,6 +9,7 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import com.mogo.map.MogoBaseMapView; import com.mogo.utils.logger.Logger; @@ -32,6 +34,7 @@ public class SmallMapView extends MogoBaseMapView { super(context, attrs, defStyleAttr); } + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override protected void addMapView(Context context) { Logger.d(TAG, "addMapView"); @@ -39,6 +42,8 @@ public class SmallMapView extends MogoBaseMapView { if (mMapView != null) { final View mapView = mMapView.getMapView(); if (mapView != null) { + mapView.setOutlineProvider(new TextureVideoViewOutlineProvider(360)); + mapView.setClipToOutline(true); addView(mapView, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); } else { Logger.e(TAG, "create MapView instance failed."); diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java index a1d8f9c769..6c18a05d75 100644 --- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java +++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java @@ -73,7 +73,6 @@ public class SmallVisionProvider implements IMogoSmallMapProvider, IMogoStatusCh @Override public void showPanel() { Log.d(TAG, "小地图模块触发展示……"); - if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { mSmallMapServiceIntent = new Intent(mContext, SmallMapService.class); mContext.startService(mSmallMapServiceIntent); @@ -83,10 +82,8 @@ public class SmallVisionProvider implements IMogoSmallMapProvider, IMogoStatusCh @Override public void hidePanel() { Log.d(TAG, "小地图模块触发隐藏……"); - if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { - if (mSmallMapServiceIntent != null) { - AbsMogoApplication.getApp().stopService(mSmallMapServiceIntent); - } + if (mSmallMapServiceIntent != null) { + AbsMogoApplication.getApp().stopService(mSmallMapServiceIntent); } } diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/TextureVideoViewOutlineProvider.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/TextureVideoViewOutlineProvider.java new file mode 100644 index 0000000000..45f82de108 --- /dev/null +++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/TextureVideoViewOutlineProvider.java @@ -0,0 +1,35 @@ +package com.mogo.module.small.map; + +import android.graphics.Outline; +import android.graphics.Rect; +import android.os.Build; +import android.util.Log; +import android.view.View; +import android.view.ViewOutlineProvider; + +import androidx.annotation.RequiresApi; + +/** + * @author donghongyu + * @date 12/15/20 8:47 PM + */ +@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) +public class TextureVideoViewOutlineProvider extends ViewOutlineProvider { + private float mRadius; + + public TextureVideoViewOutlineProvider(float radius) { + this.mRadius = radius; + } + + @Override + public void getOutline(View view, Outline outline) { + Log.w("OutlineProvider", "======getOutline======"); + Rect rect = new Rect(); + view.getGlobalVisibleRect(rect); + int leftMargin = 0; + int topMargin = 0; + Rect selfRect = new Rect(leftMargin, topMargin, + rect.right - rect.left - leftMargin, rect.bottom - rect.top - topMargin); + outline.setRoundRect(selfRect, mRadius); + } +} \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/res/drawable-xhdpi/module_small_map_view_border.png b/modules/mogo-module-smp/src/main/res/drawable-xhdpi/module_small_map_view_border.png index cc2c540c8b361ceae0006a59a50a8e04c6e8929e..1c4bf333ca92ee7947e1df5379062e5676b54e9c 100644 GIT binary patch literal 29440 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 literal 28791 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

typpO$v3UWwMOjh_EpU%)wTpCpIH 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 Date: Wed, 16 Dec 2020 19:25:17 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E5=B0=8F?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/module/common/view/RoundLayout.java | 16 +-- modules/mogo-module-smp/build.gradle | 3 + .../src/main/AndroidManifest.xml | 2 +- .../src/main/assets/small_map_style.data | Bin 0 -> 141822 bytes .../main/assets/small_map_style_extra.data | Bin 0 -> 2734 bytes .../small/map/SmallMapDirectionView.java | 51 +++++++++- .../module/small/map/SmallMapService.java | 8 +- .../mogo/module/small/map/SmallMapView.java | 91 ------------------ .../map/TextureVideoViewOutlineProvider.java | 35 ------- ...module_small_map_view_my_location_logo.png | Bin 0 -> 2352 bytes .../drawable/module_small_map_view_border.xml | 4 + .../main/res/layout/module_small_map_view.xml | 8 +- .../src/main/res/values-xhdpi/dimens.xml | 4 +- 13 files changed, 72 insertions(+), 150 deletions(-) create mode 100644 modules/mogo-module-smp/src/main/assets/small_map_style.data create mode 100644 modules/mogo-module-smp/src/main/assets/small_map_style_extra.data delete mode 100644 modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapView.java delete mode 100644 modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/TextureVideoViewOutlineProvider.java create mode 100644 modules/mogo-module-smp/src/main/res/drawable-xhdpi/module_small_map_view_my_location_logo.png create mode 100644 modules/mogo-module-smp/src/main/res/drawable/module_small_map_view_border.xml diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/view/RoundLayout.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/view/RoundLayout.java index 23418c8b9e..20150f4a19 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/view/RoundLayout.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/view/RoundLayout.java @@ -3,6 +3,8 @@ package com.mogo.module.common.view; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PaintFlagsDrawFilter; import android.graphics.Path; import android.graphics.RectF; import android.util.AttributeSet; @@ -19,11 +21,10 @@ import com.mogo.skin.support.helper.MogoSkinCompatBackgroundHelperDelegate; * desc : * version: 1.0 */ -public class RoundLayout extends RelativeLayout implements IMogoSkinCompatSupportable { +public class RoundLayout extends RelativeLayout { private float roundLayoutRadius = 14f; private Path roundPath; private RectF rectF; - private MogoSkinCompatBackgroundHelperDelegate mBackgroundTintHelper; public RoundLayout(Context context) { this(context, null); @@ -41,9 +42,6 @@ public class RoundLayout extends RelativeLayout implements IMogoSkinCompatSuppor typedArray.recycle(); init(); - - mBackgroundTintHelper = new MogoSkinCompatBackgroundHelperDelegate(this); - mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr); } @@ -75,16 +73,10 @@ public class RoundLayout extends RelativeLayout implements IMogoSkinCompatSuppor @Override public void draw(Canvas canvas) { if (roundLayoutRadius > 0f) { + canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG)); canvas.clipPath(roundPath); } super.draw(canvas); } - - @Override - public void applySkin() { - if (mBackgroundTintHelper != null) { - mBackgroundTintHelper.applySkin(); - } - } } diff --git a/modules/mogo-module-smp/build.gradle b/modules/mogo-module-smp/build.gradle index e3a46f8dd8..888a054935 100644 --- a/modules/mogo-module-smp/build.gradle +++ b/modules/mogo-module-smp/build.gradle @@ -38,6 +38,9 @@ dependencies { implementation rootProject.ext.dependencies.androidxappcompat implementation rootProject.ext.dependencies.androidxconstraintlayout implementation rootProject.ext.dependencies.arouter + + implementation rootProject.ext.dependencies.amapnavi3dmap + annotationProcessor rootProject.ext.dependencies.aroutercompiler if (Boolean.valueOf(RELEASE)) { api rootProject.ext.dependencies.mogomap diff --git a/modules/mogo-module-smp/src/main/AndroidManifest.xml b/modules/mogo-module-smp/src/main/AndroidManifest.xml index 649a2f531a..3d0a81ab9f 100644 --- a/modules/mogo-module-smp/src/main/AndroidManifest.xml +++ b/modules/mogo-module-smp/src/main/AndroidManifest.xml @@ -6,6 +6,6 @@ + /> \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/assets/small_map_style.data b/modules/mogo-module-smp/src/main/assets/small_map_style.data new file mode 100644 index 0000000000000000000000000000000000000000..75195b39a29c1b139f8e5ce6b0e9c22c01de40b3 GIT binary patch literal 141822 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 WNB;zLckhb;0000 + + + \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml b/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml index b3703a522f..a5429f8ce3 100644 --- a/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml +++ b/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml @@ -1,5 +1,5 @@ - - @@ -26,4 +26,4 @@ android:layout_centerInParent="true" android:src="@drawable/module_small_map_view_border" /> - \ No newline at end of file + \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml index 41d38e65b4..c09710af88 100644 --- a/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml @@ -3,8 +3,8 @@ 400px 400px - 300px - 300px + 260px + 260px 1490px 650px From faf7438bb0b33a3c912ea1d7547d4f0c8b253762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 17 Dec 2020 14:21:38 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E5=B0=8F?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E7=9A=84=E6=8F=8F=E8=BE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../small/map/SmallMapDelegateFactory.java | 66 ------------------- .../small/map/SmallMapDirectionView.java | 12 +++- .../bg_module_small_map_view_border.xml | 28 ++++++++ .../drawable/module_small_map_view_border.xml | 4 -- .../main/res/layout/module_small_map_view.xml | 11 +++- .../src/main/res/values-xhdpi/dimens.xml | 7 +- 6 files changed, 51 insertions(+), 77 deletions(-) delete mode 100644 modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDelegateFactory.java create mode 100644 modules/mogo-module-smp/src/main/res/drawable/bg_module_small_map_view_border.xml delete mode 100644 modules/mogo-module-smp/src/main/res/drawable/module_small_map_view_border.xml diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDelegateFactory.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDelegateFactory.java deleted file mode 100644 index 962be7d52f..0000000000 --- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDelegateFactory.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.mogo.module.small.map; - -import android.content.Context; - -import com.alibaba.android.arouter.launcher.ARouter; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.map.IMogoMapApiBuilder; -import com.mogo.map.IMogoMapView; -import com.mogo.map.impl.automap.navi.AutoNaviClient; -import com.mogo.map.location.IMogoLocationClient; -import com.mogo.map.navi.IMogoAimless; -import com.mogo.map.navi.IMogoNavi; -import com.mogo.map.search.drive.IMogoRoadSearch; -import com.mogo.map.search.geo.IMogoGeoSearch; -import com.mogo.map.search.inputtips.IMogoInputtipsSearch; -import com.mogo.map.search.inputtips.query.MogoInputtipsQuery; -import com.mogo.map.search.poisearch.IMogoPoiSearch; -import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; -import com.mogo.map.search.traffic.IMogoTrafficSearch; -import com.mogo.map.uicontroller.IMogoMapUIController; -import com.mogo.utils.AppUtils; - -/** - * @author donghongyu - * @since 2020/12/14 - *

- * 描述 - */ -class SmallMapDelegateFactory { - - private static final String TAG = "MogoMapDelegateFactory"; - - private static IMogoMapApiBuilder sApiBuilder; - - private static IMogoMapApiBuilder getApiBuilder() { - if ( sApiBuilder == null ) { - synchronized ( SmallMapDelegateFactory.class ) { - if ( sApiBuilder == null ) { - sApiBuilder = ARouter.getInstance().navigation( IMogoMapApiBuilder.class ); - } - } - } - return sApiBuilder; - } - - - public static IMogoAimless getAimless( Context context ) { - return getApiBuilder().getAimless( context ); - } - - public static void createMapViewInstance( Context context ) { - getApiBuilder().createMapView( context ); - } - - public static void destroy() { - getApiBuilder().destroy(); - } - - public static IMogoMapView getMapView(Context context ) { - return getApiBuilder().getMapView( context ); - } - - public static IMogoTrafficSearch getTrafficSearch() { - return getApiBuilder().getTrafficSearch(); - } -} diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDirectionView.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDirectionView.java index dddd20e2fe..1eaedef6d3 100644 --- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDirectionView.java +++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDirectionView.java @@ -20,6 +20,9 @@ import com.amap.api.maps.model.MyLocationStyle; import com.mogo.module.common.view.RoundLayout; import com.mogo.module.small.map.animation.DirectionRotateAnimation; +import java.io.InputStream; +import java.net.URL; + /** * 小地图的方向View * @@ -60,12 +63,15 @@ public class SmallMapDirectionView extends RoundLayout { mTextureMapView.onCreate(null); mAMap = mTextureMapView.getMap(); -// mAMap.setMapType(AMap.MAP_TYPE_NIGHT);//夜景地图,aMap是地图控制器对象。 + mAMap.setMapType(AMap.MAP_TYPE_NIGHT);//夜景地图,aMap是地图控制器对象。 + + URL small_map_style = getClass().getResource("/assets/small_map_style.data"); + URL small_map_style_extra = getClass().getResource("/assets/small_map_style_extra.data"); mAMap.setCustomMapStyle(new CustomMapStyleOptions() .setEnable(true) - .setStyleDataPath("file:///android_asset/small_map_style.data") - .setStyleExtraPath("file:///android_asset/small_map_style_extra.data") + .setStyleDataPath(small_map_style.getPath()) + .setStyleExtraPath(small_map_style_extra.getPath()) ); myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。 diff --git a/modules/mogo-module-smp/src/main/res/drawable/bg_module_small_map_view_border.xml b/modules/mogo-module-smp/src/main/res/drawable/bg_module_small_map_view_border.xml new file mode 100644 index 0000000000..46982d07c3 --- /dev/null +++ b/modules/mogo-module-smp/src/main/res/drawable/bg_module_small_map_view_border.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/res/drawable/module_small_map_view_border.xml b/modules/mogo-module-smp/src/main/res/drawable/module_small_map_view_border.xml deleted file mode 100644 index a8b409b1d1..0000000000 --- a/modules/mogo-module-smp/src/main/res/drawable/module_small_map_view_border.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml b/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml index a5429f8ce3..59c74ffedd 100644 --- a/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml +++ b/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml @@ -5,10 +5,17 @@ android:layout_height="@dimen/module_small_map_border_view_width" app:roundLayoutRadius="360dp"> + + + diff --git a/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml index c09710af88..461d5da465 100644 --- a/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-smp/src/main/res/values-xhdpi/dimens.xml @@ -3,8 +3,11 @@ 400px 400px - 260px - 260px + 260px + 260px + + 250px + 250px 1490px 650px From b4cd08c766b828dad8718bed3360915bec2f0de9 Mon Sep 17 00:00:00 2001 From: liujing Date: Thu, 17 Dec 2020 16:46:23 +0800 Subject: [PATCH 07/10] =?UTF-8?q?[add]=20=E8=B4=9D=E5=A1=9E=E5=B0=94?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/animation/BezierAnimationView.java | 141 ++++++++++++++++++ .../common/animation/BezierEvaluator.java | 45 ++++++ .../common/animation/BezierListener.java | 24 +++ .../icon_common_heart_animation_vr00.png | Bin 0 -> 4386 bytes .../icon_common_heart_animation_vr01.png | Bin 0 -> 4386 bytes .../icon_common_heart_animation_vr02.png | Bin 0 -> 4386 bytes 6 files changed, 210 insertions(+) create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierAnimationView.java create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierEvaluator.java create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierListener.java create mode 100644 modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_common_heart_animation_vr00.png create mode 100644 modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_common_heart_animation_vr01.png create mode 100644 modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_common_heart_animation_vr02.png diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierAnimationView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierAnimationView.java new file mode 100644 index 0000000000..85ad93badb --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierAnimationView.java @@ -0,0 +1,141 @@ +package com.mogo.module.common.animation; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; +import android.content.Context; +import android.graphics.PointF; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.LinearInterpolator; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import androidx.core.content.ContextCompat; + +import com.mogo.module.common.R; + +import java.util.Random; + +public class BezierAnimationView extends RelativeLayout implements View.OnClickListener { + private String TAG = "BezierAnimationView"; + private Context context; + private int[] animation_drawable = { + R.drawable.icon_common_heart_animation_vr00, + R.drawable.icon_heart_unchoose_other, + R.drawable.icon_map_marker_living}; + private Random random = new Random(); + private int width = 500, height = 210; + private int drawableWidth, drawableHeight; + + public BezierAnimationView(Context context) { + this(context, null); + } + + public BezierAnimationView(Context context, AttributeSet attributes) { + this(context, attributes, 0); + } + + public BezierAnimationView(Context context, AttributeSet attributes, int defStyleAttr) { + super(context, attributes, defStyleAttr); + this.context = context; + //3、设置点击事件 + setOnClickListener(this); + //4、获取点赞图片的宽高 + Drawable drawable = ContextCompat.getDrawable(context, R.drawable.icon_common_heart_animation_vr02); + drawableWidth = drawable.getIntrinsicWidth(); + drawableHeight = drawable.getIntrinsicHeight(); + } + + @Override + public void onClick(View view) { + Log.d("执行点赞动画", "ppp"); + bezierAnimation(); + } + + private void bezierAnimation() { + final ImageView imageView = new ImageView(context); + imageView.setBackgroundResource(animation_drawable[random.nextInt(animation_drawable.length - 1)]); + RelativeLayout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.addRule(ALIGN_BOTTOM); + params.addRule(CENTER_HORIZONTAL); + imageView.setLayoutParams(params); + addView(imageView); + + /* + * 开始执行点赞效果 + * */ + AnimatorSet animatorSet = getAnimatorSet(imageView); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + //3、动画执行后移除View + removeView(imageView); + } + }); + animatorSet.start(); + } + + private AnimatorSet getAnimatorSet(ImageView imageView) { + AnimatorSet enter = new AnimatorSet(); + /* + * 缩放动画 + * */ + AnimatorSet scaleAnimator = new AnimatorSet(); + ObjectAnimator alpha = ObjectAnimator.ofFloat(imageView, "alpha", 0.8f, 1f); + ObjectAnimator scaleX = ObjectAnimator.ofFloat(imageView, "scaleX", 0.8f, 1f); + ObjectAnimator scaleY = ObjectAnimator.ofFloat(imageView, "scaleY", 0.8f, 1f); + scaleAnimator.setDuration(500); + scaleAnimator.playTogether(alpha, scaleX, scaleY); + + /* + * 贝塞尔动画 + * */ + ValueAnimator bezierAnimator = getBezierValueAnimator(imageView); + /* + * 两个动画按顺序播放 + * */ + enter.playSequentially(scaleAnimator, bezierAnimator); + return enter; + } + + /** + * 获取贝塞尔曲线动画 + * + * @param target + * @return + */ + private ValueAnimator getBezierValueAnimator(View target) { + + //初始化一个BezierEvaluator + BezierEvaluator evaluator = new BezierEvaluator(getPointF(1), getPointF(1)); + + // 起点固定,终点随机 + ValueAnimator animator = ValueAnimator.ofObject(evaluator, new PointF((width - 40) / 2, height - 80), + new PointF(random.nextInt(getWidth()), 0)); + animator.addUpdateListener(new BezierListener(target)); + animator.setTarget(target); + animator.setDuration(3000); + return animator; + } + + /** + * 获取一条路径的两个控制点 + * + * @param scale + */ + private PointF getPointF(int scale) { + + PointF pointF = new PointF(); + //减去100 是为了控制 x轴活动范围 + pointF.x = random.nextInt((width)); + //再Y轴上 为了确保第二个控制点 在第一个点之上,我把Y分成了上下两半 + pointF.y = random.nextInt((height)) / scale; + return pointF; + } +} diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierEvaluator.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierEvaluator.java new file mode 100644 index 0000000000..6effc925b1 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierEvaluator.java @@ -0,0 +1,45 @@ +package com.mogo.module.common.animation; + +import android.animation.TypeEvaluator; +import android.graphics.PointF; + +/** + * 贝塞尔曲线估值器:计算动画的执行轨迹 + * + * @params 传入贝塞尔曲线需要的四个点 + * @return 通过计算返回贝塞尔曲线的坐标 + */ +public class BezierEvaluator implements TypeEvaluator { + + private PointF pointF1; + private PointF pointF2; + + public BezierEvaluator(PointF point1, PointF point2) { + this.pointF1 = point1; + this.pointF2 = point2; + } + + @Override + public PointF evaluate(float time, PointF startValue, PointF endValue) { + float timeLeft = 1.0f - time; + + //结果 + PointF point = new PointF(); + + PointF point0 = (PointF)startValue;//起点 + PointF point3 = (PointF)endValue;//终点 + + // 贝塞尔公式 + point.x = timeLeft * timeLeft * timeLeft * (point0.x) + + 3 * timeLeft * timeLeft * time * (pointF1.x) + + 3 * timeLeft * time * time * (pointF2.x) + + time * time * time * (point3.x); + + point.y = timeLeft * timeLeft * timeLeft * (point0.y) + + 3 * timeLeft * timeLeft * time * (pointF1.y) + + 3 * timeLeft * time * time * (pointF2.y) + + time * time * time * (point3.y); + + return point; + } +} \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierListener.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierListener.java new file mode 100644 index 0000000000..04ab1129c2 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/animation/BezierListener.java @@ -0,0 +1,24 @@ +package com.mogo.module.common.animation; + +import android.animation.ValueAnimator; +import android.graphics.PointF; +import android.view.View; + +public class BezierListener implements ValueAnimator.AnimatorUpdateListener { + + private View target; + + public BezierListener(View target) { + this.target = target; + } + + @Override + public void onAnimationUpdate(ValueAnimator animation) { + //这里获取到贝塞尔曲线计算出来的的x y值 赋值给view 这样就能让爱心随着曲线走啦 + PointF pointF = (PointF) animation.getAnimatedValue(); + target.setX(pointF.x); + target.setY(pointF.y); + // 这里偷个懒,顺便做一个alpha动画,这样alpha渐变也完成啦 + target.setAlpha(1 - animation.getAnimatedFraction()); + } +} \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_common_heart_animation_vr00.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_common_heart_animation_vr00.png new file mode 100644 index 0000000000000000000000000000000000000000..5246d61ccc4779122340b8b2557aad23029f86c6 GIT binary patch literal 4386 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 Date: Thu, 17 Dec 2020 17:03:53 +0800 Subject: [PATCH 08/10] =?UTF-8?q?[v2x]=20vr=E4=B8=8B=E6=B7=BB=E5=8A=A0mark?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/impl/MoGoV2XMarkerManager.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XMarkerManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XMarkerManager.java index 21e184ed1f..9e3b9b2ad7 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XMarkerManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XMarkerManager.java @@ -4,14 +4,17 @@ import android.content.Context; import android.graphics.Bitmap; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.commons.AbsMogoApplication; import com.mogo.map.MogoLatLng; import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.module.common.drawer.MarkerDrawer; import com.mogo.module.common.drawer.marker.IMarkerView; import com.mogo.module.common.drawer.marker.MapMarkerAdapter; +import com.mogo.module.common.drawer.marker.RoadConditionInfoWindow3DAdapter; import com.mogo.module.common.entity.MarkerCardResult; import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerLocation; @@ -532,6 +535,13 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager { .longitude(roadEventEntity.getLocation().getLon()); optionsRipple.anchor(0.5f, 0.5f); + MarkerShowEntity markerShowEntity = new MarkerShowEntity(); + MarkerExploreWay markerExploreWay = roadEventEntity.getNoveltyInfo(); + markerShowEntity.setBindObj(markerExploreWay); + markerShowEntity.setMarkerLocation(markerExploreWay.getLocation()); + markerShowEntity.setMarkerType(markerExploreWay.getPoiType()); + markerShowEntity.setTextContent(markerExploreWay.getPoiType()); + // 由于性能问题,D车机不使用事件扩散动画 if (!CarSeries.isF8xxSeries()) { optionsRipple.icon(V2XMarkerAdapter.getV2XRoadEventViewPng(context, roadEventEntity)); @@ -539,8 +549,13 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager { optionsRipple.icons(V2XMarkerAdapter.getV2XRoadEventViewGif(context, roadEventEntity)); optionsRipple.period(1); } - - mAlarmInfoMarker = V2XServiceManager.getMarkerManager().addMarker(V2X_EVENT_ALARM_POI, optionsRipple); + if (V2XServiceManager.getMoGoStatusManager().isVrMode()) { + mAlarmInfoMarker = MarkerDrawer.getInstance().drawMapMarkerImpl(markerShowEntity, MarkerDrawer.MARKER_Z_INDEX_HIGH, clickListener); + mAlarmInfoMarker.setInfoWindowAdapter(new RoadConditionInfoWindow3DAdapter(markerShowEntity, AbsMogoApplication.getApp(), mAlarmInfoMarker.getMogoMarkerOptions())); + mAlarmInfoMarker.showInfoWindow(); + } else { + mAlarmInfoMarker = V2XServiceManager.getMarkerManager().addMarker(V2X_EVENT_ALARM_POI, optionsRipple); + } // 当前Marker设置为最上面 mAlarmInfoMarker.setToTop(); // 绘制连接线 From 9b4607b37adc684b553cc9b1cb2d9c5061c38a4d Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 17 Dec 2020 15:36:26 +0800 Subject: [PATCH 09/10] opt --- .../res/layout/modudle_camera_layout_info.xml | 4 --- .../utils/CameraLiveNoticeHelper.java | 28 +++++++++++------- .../src/main/res/drawable-ldpi/icon_space.png | Bin 0 -> 163 bytes .../src/main/res/drawable-mdpi/icon_space.png | Bin 0 -> 163 bytes .../main/res/drawable-xhdpi/icon_space.png | Bin 0 -> 163 bytes .../media/widget/CircleNumberProgress.java | 14 +++++++-- .../module/media/window/MediaWindow2.java | 9 +----- ...le_media_music_window_alert_layout_new.xml | 2 ++ .../src/main/res/values/colors.xml | 2 +- .../service/location/MogoRTKLocation.java | 5 ++++ 10 files changed, 38 insertions(+), 26 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-ldpi/icon_space.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-mdpi/icon_space.png create mode 100644 modules/mogo-module-extensions/src/main/res/drawable-xhdpi/icon_space.png diff --git a/modules/mogo-module-common/src/main/res/layout/modudle_camera_layout_info.xml b/modules/mogo-module-common/src/main/res/layout/modudle_camera_layout_info.xml index 360fbb6d4a..39535e2391 100644 --- a/modules/mogo-module-common/src/main/res/layout/modudle_camera_layout_info.xml +++ b/modules/mogo-module-common/src/main/res/layout/modudle_camera_layout_info.xml @@ -15,8 +15,4 @@ android:layout_height="wrap_content" android:src="@drawable/module_camera_real_time_traffic" /> - - \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java index cecf99c144..9413d2bcc6 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java @@ -34,7 +34,7 @@ public class CameraLiveNoticeHelper implements IMogoOnWebSocketMessageListener { - mCloudRoadData = new CloudRoadData(); - mCloudRoadData.setRtmpUrl("rtmp://58.200.131.2:1935/livetv/hunantv"); + if (!isFirst) { + isFirst = true; + UiThreadHandler.postDelayed(() -> { + mCloudRoadData = new CloudRoadData(); + mCloudRoadData.setRtmpUrl("rtmp://58.200.131.2:1935/livetv/hunantv"); mCloudRoadData.setLat(40.200353); mCloudRoadData.setLon(116.745467); + +// mCloudRoadData.setLat(40.200481); +// mCloudRoadData.setLon(116.738473); + // CameraLiveManager.getInstance().init(mCloudRoadData); - addCameraMarker(mCloudRoadData); - }, 2_000); + addCameraMarker(mCloudRoadData); + }, 2_000); + } } @@ -90,15 +97,14 @@ public class CameraLiveNoticeHelper implements IMogoOnWebSocketMessageListener?T zfNTy1#`a7G7LXDkmI7i12Id8f49q~95hS*N2`lFz;gC(9 dV0`8t7X#C5#)1#A%8Nk?JYD@<);T3K0RVV#8oU4i literal 0 HcmV?d00001 diff --git a/modules/mogo-module-extensions/src/main/res/drawable-mdpi/icon_space.png b/modules/mogo-module-extensions/src/main/res/drawable-mdpi/icon_space.png new file mode 100644 index 0000000000000000000000000000000000000000..a2350b85a83e3be89d63ea1461878407f940a1ee GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k92}K#X;^)4C~IxyaaMwQX@Rme0>?T zfNTy1#`a7G7LXDkmI7i12Id8f49q~95hS*N2`lFz;gC(9 dV0`8t7X#C5#)1#A%8Nk?JYD@<);T3K0RVV#8oU4i literal 0 HcmV?d00001 diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/icon_space.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/icon_space.png new file mode 100644 index 0000000000000000000000000000000000000000..a2350b85a83e3be89d63ea1461878407f940a1ee GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k92}K#X;^)4C~IxyaaMwQX@Rme0>?T zfNTy1#`a7G7LXDkmI7i12Id8f49q~95hS*N2`lFz;gC(9 dV0`8t7X#C5#)1#A%8Nk?JYD@<);T3K0RVV#8oU4i literal 0 HcmV?d00001 diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/CircleNumberProgress.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/CircleNumberProgress.java index 1334310de3..ecd1fa5405 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/CircleNumberProgress.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/widget/CircleNumberProgress.java @@ -1,6 +1,7 @@ package com.mogo.module.media.widget; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; @@ -9,6 +10,7 @@ import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; +import com.mogo.module.media.R; import com.mogo.module.media.utils.Utils; /** @@ -24,10 +26,12 @@ public class CircleNumberProgress extends View { private int paintTextSize = 20; /** 未完成进度条的颜色 */ - private int paintUndoneColor = 0xffaaaaaa; +// private int paintUndoneColor = 0xffaaaaaa; + private int paintUndoneColor; /** 已完成进度条的颜色 */ - private int paintDoneColor = 0xff67aae4; +// private int paintDoneColor = 0xff67aae4; + private int paintDoneColor; /** 百分比文字的颜色 */ private int paintTextColor = 0xffff0077; @@ -70,6 +74,12 @@ public class CircleNumberProgress extends View { public CircleNumberProgress(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.PercentageRing); + //中间圆的背景颜色 默认为浅紫色 + paintUndoneColor = typedArray.getColor(R.styleable.PercentageRing_circleBackground, 0xffafb4db); + //外圆环的颜色 默认为深紫色 + paintDoneColor = typedArray.getColor(R.styleable.PercentageRing_ringColor, 0xff6950a1); + // 构造器中初始化数据 initData(); } diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java index d30717caea..6acb0415ac 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java @@ -314,16 +314,9 @@ public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener { // GlideApp.with(mContext).applyDefaultRequestOptions(options).load(mMediaInfoData.getMediaImg()).into(new SkinAbleBitmapTarget(mCircleImg, options)); }else{ Logger.e(TAG, "mMediaInfoData == null "); -// mAnimCircleImageView.setImageResource(R.drawable.module_media_default_music_img); - int size = - mContext.getResources().getDimensionPixelSize(R.dimen.module_media_pop_window_anim_img_size_new); - com.bumptech.glide.request.RequestOptions options = - new com.bumptech.glide.request.RequestOptions() - .placeholder(R.drawable.module_media_default_music_img).error(R.drawable.module_media_default_music_img).override(size, size); - GlideApp.with(mContext).asBitmap().apply(options).load("").into(new SkinAbleBitmapTarget(mAnimCircleImageView, options)); + mAnimCircleImageView.setImageResource(R.drawable.module_media_default_music_img); } } - } else { if (mScrollText != null) { mScrollText.setText(mMediaInfoData.getMediaName()); diff --git a/modules/mogo-module-media/src/main/res/layout/module_media_music_window_alert_layout_new.xml b/modules/mogo-module-media/src/main/res/layout/module_media_music_window_alert_layout_new.xml index 8c0e5dbe4d..d36414c4b7 100644 --- a/modules/mogo-module-media/src/main/res/layout/module_media_music_window_alert_layout_new.xml +++ b/modules/mogo-module-media/src/main/res/layout/module_media_music_window_alert_layout_new.xml @@ -11,6 +11,8 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toRightOf="parent" + app:circleBackground="@color/modules_media_music_bg_color" + app:ringColor="@color/modules_media_music_circle_color" android:layout_width="match_parent" android:layout_height="match_parent" /> diff --git a/modules/mogo-module-media/src/main/res/values/colors.xml b/modules/mogo-module-media/src/main/res/values/colors.xml index b0944c76eb..b6ca26aca2 100644 --- a/modules/mogo-module-media/src/main/res/values/colors.xml +++ b/modules/mogo-module-media/src/main/res/values/colors.xml @@ -3,5 +3,5 @@ #fff #7affffff #444E6E - #B63737 + #80ffffff diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/location/MogoRTKLocation.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/location/MogoRTKLocation.java index 9ab2c99113..3234b62ae7 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/location/MogoRTKLocation.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/location/MogoRTKLocation.java @@ -11,6 +11,7 @@ import android.location.LocationManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.util.Log; import com.mogo.commons.AbsMogoApplication; import com.mogo.module.common.entity.CloudLocationInfo; @@ -121,7 +122,11 @@ public class MogoRTKLocation { cloudLocationInfo.setSpeed(location.getSpeed()); cloudLocationInfo.setSatelliteTime(location.getTime()); cloudLocationInfo.setSystemTime(System.currentTimeMillis()); + + Log.e("liyz", "lat = " + location.getLatitude() + ">>>>long = " + location.getLongitude()); cacheList.add(cloudLocationInfo); + } else { + Log.e("liyz", "location == null"); } } From 6673da5adfc24d376b85d6aa864d550a63553dbe Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 17 Dec 2020 17:28:47 +0800 Subject: [PATCH 10/10] opt --- .../drawer/marker/MapCameraInfoView.java | 1 + .../live/CameraLiveGSYVideoView.java | 2 +- .../utils/CameraLiveNoticeHelper.java | 39 +++++++++---------- .../service/location/MogoRTKLocation.java | 4 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapCameraInfoView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapCameraInfoView.java index d6f3990014..9d88d0b644 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapCameraInfoView.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapCameraInfoView.java @@ -3,6 +3,7 @@ package com.mogo.module.common.drawer.marker; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveGSYVideoView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveGSYVideoView.java index 19c37173f7..2f39286ae9 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveGSYVideoView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/live/CameraLiveGSYVideoView.java @@ -113,7 +113,7 @@ public class CameraLiveGSYVideoView extends LiveRoundLayout implements IMogoSkin private void playLiveVideo(String liveUrl) { try { if (mLivePlayer != null) { - mLivePlayer.startPlay(liveUrl, TXLivePlayer.PLAY_TYPE_LIVE_RTMP); + mLivePlayer.startPlay(liveUrl, TXLivePlayer.PLAY_TYPE_LIVE_FLV); mLivePlayer.setPlayListener(new ITXLivePlayListener() { @Override public void onPlayEvent(int event, Bundle bundle) { diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java index 9413d2bcc6..d796926105 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java @@ -60,27 +60,28 @@ public class CameraLiveNoticeHelper implements IMogoOnWebSocketMessageListener { - mCloudRoadData = new CloudRoadData(); - mCloudRoadData.setRtmpUrl("rtmp://58.200.131.2:1935/livetv/hunantv"); - mCloudRoadData.setLat(40.200353); - mCloudRoadData.setLon(116.745467); - -// mCloudRoadData.setLat(40.200481); -// mCloudRoadData.setLon(116.738473); - -// CameraLiveManager.getInstance().init(mCloudRoadData); - addCameraMarker(mCloudRoadData); - }, 2_000); - } +// if (!isFirst) { +// isFirst = true; +// UiThreadHandler.postDelayed(() -> { +// mCloudRoadData = new CloudRoadData(); +//// mCloudRoadData.setRtmpUrl("rtmp://58.200.131.2:1935/livetv/hunantv"); +// mCloudRoadData.setRtmpUrl("http://video.zhidaozhixing.com/live/rec_12_22.flv"); +// +// mCloudRoadData.setLat(39.969089); +// mCloudRoadData.setLon(116.418009); +// +//// CameraLiveManager.getInstance().init(mCloudRoadData); +// addCameraMarker(mCloudRoadData); +// }, 2_000); +// } } public void exitVrMode() { Logger.d(TAG, "退出vr模式==="); +// removeCameraMarker(); +// isFirst = false; MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(mContext).unregisterOnWebSocketMessageListener(this); } @@ -97,8 +98,7 @@ public class CameraLiveNoticeHelper implements IMogoOnWebSocketMessageListener>>>long = " + location.getLongitude()); +// Log.e("liyz", "lat = " + location.getLatitude() + ">>>>long = " + location.getLongitude()); cacheList.add(cloudLocationInfo); } else { - Log.e("liyz", "location == null"); + Logger.e(TAG, "location == null"); } }