diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java index 2639322021..29574c7749 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java @@ -72,8 +72,8 @@ public class ObjectUtils { MarkerOptions markerOptions = new MarkerOptions() .position(new LonLatPoint(opt.getLongitude(), opt.getLatitude())) .anchor(opt.getU(), opt.getV()) -// .icons( descriptors ) -// .period( opt.getPeriod() ) + .icons( descriptors ) + .period( opt.getPeriod() ) .rotateAngle(opt.getRotate()) .setFlat(opt.isFlat()) .visible(opt.isVisible()) 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 ecd1fa5405..bfda00bc62 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 @@ -3,10 +3,13 @@ package com.mogo.module.media.widget; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; +import android.graphics.SweepGradient; import android.util.AttributeSet; import android.view.View; @@ -78,7 +81,7 @@ public class CircleNumberProgress extends View { //中间圆的背景颜色 默认为浅紫色 paintUndoneColor = typedArray.getColor(R.styleable.PercentageRing_circleBackground, 0xffafb4db); //外圆环的颜色 默认为深紫色 - paintDoneColor = typedArray.getColor(R.styleable.PercentageRing_ringColor, 0xff6950a1); +// paintDoneColor = typedArray.getColor(R.styleable.PercentageRing_ringColor, Color.parseColor("#e6fffff")); // 构造器中初始化数据 initData(); @@ -100,17 +103,20 @@ public class CircleNumberProgress extends View { paintUndone.setStyle(Paint.Style.STROKE); // 已经完成进度条的画笔的属性 - paintDone.setColor(paintDoneColor); +// paintDone.setColor(paintDoneColor); paintDone.setStrokeWidth(paintProgressWidthPx); paintDone.setAntiAlias(true); paintDone.setStyle(Paint.Style.STROKE); - // 文字的画笔的属性 -// paintText.setColor(paintTextColor); -// paintText.setTextSize(paintTextSizePx); -// paintText.setAntiAlias(true); -// paintText.setStyle(Paint.Style.STROKE); -// paintText.setTypeface(Typeface.DEFAULT_BOLD); + float[] pos = {0f, 0.5f, 1.0f}; + SweepGradient linearGradient = new SweepGradient((getMeasuredWidth() - 40)/2,(getMeasuredHeight() - 40)/2, + new int[]{Color.parseColor("#ffffff"), Color.parseColor("#B3ffffff"), Color.parseColor("#ffffff")}, pos); + +// SweepGradient linearGradient = new SweepGradient((getMeasuredWidth() -40)/2,(getMeasuredHeight() - 40)/2,new int[]{Color.GREEN, Color.RED, Color.YELLOW, Color.WHITE, Color.BLUE}, pos); + Matrix matrix = new Matrix(); + matrix.setRotate(180, getMeasuredWidth()/2, getMeasuredHeight()/2); + linearGradient.setLocalMatrix(matrix); + paintDone.setShader(linearGradient); } @@ -147,7 +153,6 @@ public class CircleNumberProgress extends View { // 比较文字高度和圆环宽度,如果文字高度较大,那么文字将突破圆环,否则,圆环会把文字包裹在内部 Rect rect = new Rect(); -// paintText.getTextBounds("100%", 0, "100%".length(), rect); int textHeight = rect.height(); // 得到圆环的中间半径(外径和内径平均值) @@ -156,14 +161,6 @@ public class CircleNumberProgress extends View { rectF.top = viewCenterY - radiusArc; rectF.right = viewCenterX + radiusArc; rectF.bottom = viewCenterY + radiusArc; - - // 文字所依赖路径圆弧的半径 - radiusText = radiusArc - textHeight / 2; - rectF2.left = viewCenterX - radiusText; - rectF2.top = viewCenterY - radiusText; - rectF2.right = viewCenterX + radiusText; - rectF2.bottom = viewCenterY + radiusText; - } @Override @@ -176,37 +173,6 @@ public class CircleNumberProgress extends View { // 画已经完成进度的圆弧 从-90度开始,即从圆环顶部开始 canvas.drawArc(rectF, -90, progress / 100.0f * 360, false, paintDone); - // 为文字所在路径添加一段圆弧轨迹,进度为0%-9%时应该最短,进度为10%-99%时应该边长,进度为100%时应该最长 - // 这样才能保证文字和圆弧的进度一致,不会出现超前或者滞后的情况 - - // 要画的文字 - String text = progress + "%"; - - // 存储字符所有字符所占宽度的数组 - float[] widths = new float[text.length()]; - - // 得到所有字符所占的宽度 -// paintText.getTextWidths(text, 0, text.length(), widths); - - // 所有字符所占宽度之和 - float textWidth = 0; - for (float f : widths) { - textWidth += f; - } - - // 根据长度得到路径对应的扫过的角度 - // width = sweepAngle * 2 * π * R / 360 ; sweepAngle = width * 360 / 2 / - // π / R - float sweepAngle = (float) (textWidth * 360 / 2 / Math.PI / radiusText); - - // 添加路径 - path.addArc(rectF2, progress * 3.6f - 90.0f - sweepAngle / 2.0f, sweepAngle); - - // 绘制进度的文字 -// canvas.drawTextOnPath(text, path, 0, 0, paintText); - - // 重置路径 - path.reset(); } /** 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 9766ec9ffb..2469ea2ba7 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 @@ -12,9 +12,9 @@ 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-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java index 8b61879c5f..f4f30a5f05 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java @@ -2,9 +2,12 @@ package com.mogo.module.v2x.adapter.holder; import android.content.Context; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.Log; +import android.view.Gravity; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -13,6 +16,7 @@ import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.mogo.commons.debug.DebugConfig; +import com.mogo.module.common.animation.BezierAnimationView; import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerUserInfo; import com.mogo.module.common.entity.V2XEventShowEntity; @@ -76,6 +80,8 @@ public class V2XRoadEventVH extends V2XBaseViewHolder { private ImageView ivEventReportErr; private HeartLikeView ivEventZan; + private ViewGroup mViewGroup; + // 上传事件的用户信息 private MarkerUserInfo mUserInfo; @@ -148,6 +154,7 @@ public class V2XRoadEventVH extends V2XBaseViewHolder { LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_v2x_event_detail, viewGroup, false) , v2XWindow); mContext = viewGroup.getContext(); + mViewGroup = viewGroup; init(itemView); // 设置视图状态监听 itemView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @@ -261,7 +268,8 @@ public class V2XRoadEventVH extends V2XBaseViewHolder { .registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_OPEN_LIVE_UN_WAKEUP, v2XVoiceOpenLiveListener); ivEventLive.setOnClickListener(v -> { - showLiveCar(v2XEventShowEntity); + getCoordinateForFather(ivEventLive); +// showLiveCar(v2XEventShowEntity); }); } else { ivEventLive.setVisibility(GONE); @@ -306,6 +314,30 @@ public class V2XRoadEventVH extends V2XBaseViewHolder { } } + private void getCoordinateForFather(View view) { + try { + float f_top = view.getTop();//view自身的顶边到其父布局顶边的距离 + float f_left = view.getY();//view自身的左边到其父布局左边的距离 + float f_right = view.getRight();//view自身的右边到其父布局左边的距离 + float f_bottom = view.getBottom();//view自身的底边到其父布局顶边的距离 + float x_left = view.getX();//点击事件距离控件左边的距离 + float y_top = view.getTop();//点击事件距离控件顶边的距离 + + Log.d("getCoordinateForFather", "f_top:" + f_top + "f_left:" + f_left + "f_right:" + + f_right + "f_bottom:" + f_bottom + "x_left:" + x_left + "y_top:" + y_top); + + //动态添加贝塞尔动画view + BezierAnimationView bezierAnimationView = new BezierAnimationView(mContext); + Drawable drawable = mContext.getResources().getDrawable(R.drawable.bg_v2x_event_type_orange_vr); + bezierAnimationView.setBackground(drawable); + mViewGroup.addView(bezierAnimationView, 20, 20); + bezierAnimationView.setGravity(Gravity.CENTER); + + } catch (Exception e) { + + } + } + /* * 展示事件的图片/视频资源 * */ 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 ddba430565..6bcd120cee 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 @@ -60,6 +60,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager { private static CopyOnWriteArraySet mV2XRoadEventEntityArrayList = new CopyOnWriteArraySet<>(); // 上次的道路事件的预警Marker private static IMogoMarker mAlarmInfoMarker; + @Override public void drawableLastAllPOI() { //Logger.w(MODULE_NAME, "V2X---绘制上一次的POI,回调给Launcher底层逻辑让其进行绘制"); @@ -257,19 +258,20 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager { .longitude(roadEventEntity.getLocation().getLon()); optionsRipple.anchor(0.5f, 0.5f); - // 由于性能问题,D车机不使用事件扩散动画 + //由于性能问题,D车机不使用事件扩散动画 + //showInfoWindow只支持添加单个marker,不支持帧动画 if (!CarSeries.isF8xxSeries()) { optionsRipple.icon(V2XMarkerAdapter.getV2XRoadEventViewPng(context, roadEventEntity)); + if (V2XServiceManager.getMoGoStatusManager().isVrMode()) { + mAlarmInfoMarker = MarkerDrawer.getInstance().drawMapMarkerImpl(markerShowEntity, MarkerDrawer.MARKER_Z_INDEX_HIGH, null); + mAlarmInfoMarker.setInfoWindowAdapter(new RoadConditionInfoWindow3DAdapter(markerShowEntity, AbsMogoApplication.getApp(), mAlarmInfoMarker.getMogoMarkerOptions())); + mAlarmInfoMarker.showInfoWindow(); + } else { + mAlarmInfoMarker = V2XServiceManager.getMarkerManager().addMarker(V2X_EVENT_ALARM_POI, optionsRipple); + } } else { optionsRipple.icons(V2XMarkerAdapter.getV2XRoadEventViewGif(context, roadEventEntity)); - optionsRipple.period(1); - } - if (V2XServiceManager.getMoGoStatusManager().isVrMode()) { - mAlarmInfoMarker = MarkerDrawer.getInstance().drawMapMarkerImpl(markerShowEntity, MarkerDrawer.MARKER_Z_INDEX_HIGH, null); - mAlarmInfoMarker.setInfoWindowAdapter(new RoadConditionInfoWindow3DAdapter(markerShowEntity, AbsMogoApplication.getApp(), mAlarmInfoMarker.getMogoMarkerOptions())); - mAlarmInfoMarker.showInfoWindow(); - } else{ -// optionsRipple.icon(V2XMarkerAdapter.getV2XRoadEventViewPng(context, roadEventEntity)); + optionsRipple.period(100); mAlarmInfoMarker = V2XServiceManager.getMarkerManager().addMarker(V2X_EVENT_ALARM_POI, optionsRipple); } // 当前Marker设置为最上面 diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_event_detail_vr.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_event_detail_vr.xml index 2e010d7624..c4f2fd14aa 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_event_detail_vr.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_event_detail_vr.xml @@ -187,7 +187,7 @@ app:layout_constraintBottom_toBottomOf="@+id/ivEventLive" app:layout_constraintStart_toEndOf="@id/ivEventEventNav" app:layout_goneMarginLeft="@dimen/dp_10" - tools:visibility="visible" /> + tools:visibility="visible"/> @@ -198,8 +198,8 @@ android:layout_marginStart="@dimen/dp_15" android:layout_marginTop="@dimen/dp_5" android:layout_marginBottom="4dp" - android:maxLines="2" - android:textColor="@color/v2x_FFF_333" + android:maxLines="1" + android:textColor="#FFFFFF" android:textSize="@dimen/dp_40" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_fault_help_vr.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_fault_help_vr.xml index df06979f90..40dd6507ab 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_fault_help_vr.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_fault_help_vr.xml @@ -59,7 +59,7 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_20" android:layout_marginTop="@dimen/dp_15" - android:textColor="@color/v2x_FFF_333" + android:textColor="#FFFFFF" android:textSize="@dimen/dp_40" android:textStyle="bold" app:layout_constraintStart_toEndOf="@id/ivFaultHelpHead" @@ -73,7 +73,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:alpha="0.59" - android:textColor="@color/v2x_FFF_999" + android:textColor="#FFFFFF" android:textSize="@dimen/dp_24" app:layout_constraintStart_toStartOf="@id/tvFaultHelpName" app:layout_constraintTop_toBottomOf="@id/tvFaultHelpName" @@ -87,7 +87,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="@dimen/dp_42" android:gravity="center_vertical" - android:textColor="@color/v2x_FFF_333" + android:textColor="#FFFFFF" android:textSize="@dimen/dp_70" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="@+id/ivFaultHelpEventCall"