From 6470a38fa7cb5566d131b6291300be508c9fd18e Mon Sep 17 00:00:00 2001 From: liujing Date: Wed, 1 Jun 2022 17:58:51 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B8=90=E5=8F=98=E8=89=B2=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=96=B9=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/widget/CircularProgressView.kt | 74 ++++++++++++------- .../hmi/ui/widget/SteeringWheelView.java | 4 +- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt index 829163327f..0fcf706bb7 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt @@ -2,12 +2,13 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.animation.ValueAnimator import android.content.Context -import android.content.res.Resources import android.content.res.TypedArray import android.graphics.* import android.util.AttributeSet +import android.util.DisplayMetrics import android.util.Log import android.view.View +import android.view.animation.LinearInterpolator import android.view.animation.OvershootInterpolator import androidx.core.content.ContextCompat import com.mogo.eagle.core.function.hmi.R @@ -32,11 +33,13 @@ class CircularProgressView @JvmOverloads constructor( private var mRectF: RectF? = null // 圆环渐变色 - private var mColorArray: IntArray? = null + private var mConvertColorsArray: IntArray? = null // 圆环进度(0-100) 初始化进度 private var mProgress: Int = typedArray.getInteger(R.styleable.CircularProgressView_progress, 0) + var dm: DisplayMetrics = resources.displayMetrics + constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) @@ -61,9 +64,9 @@ class CircularProgressView @JvmOverloads constructor( val startColor = typedArray.getColor(R.styleable.CircularProgressView_progStartColor, -1) val firstColor = typedArray.getColor(R.styleable.CircularProgressView_progFirstColor, -1) if (startColor != -1 && firstColor != -1) { - mColorArray = intArrayOf(startColor, firstColor) + mConvertColorsArray = intArrayOf(startColor, firstColor) } else { - mColorArray = null + mConvertColorsArray = null } typedArray.recycle(); } @@ -78,24 +81,43 @@ class CircularProgressView @JvmOverloads constructor( val mRectT = getPaddingTop() + (viewHigh - mRectLength) / 2 mRectF = RectF(mRectL.toFloat(), mRectT.toFloat(), (mRectL + mRectLength).toFloat(), (mRectT + mRectLength).toFloat()) - // 设置进度圆环渐变色 - mColorArray?.let { - mProgPaint.shader = LinearGradient( - 0f, 0f, 0f, - measuredWidth.toFloat(), mColorArray!![0], mColorArray!![1], Shader.TileMode.MIRROR) - } +// // 设置进度圆环渐变色 +// mColorArray?.let { +//// mProgPaint.shader = LinearGradient( +//// 0f, 0f, 0f, +//// measuredWidth.toFloat(), mColorArray!![0], mColorArray!![1], Shader.TileMode.MIRROR) +// sweepGradient() +// } Log.d(TAG, mRectL.toString() + "," + mRectT.toString()) Log.d(TAG, mRectF.toString() + "," + "width:" + measuredWidth.toString() + "," + "PaddingLeft:" + getPaddingLeft().toString()) } + //渐变色 + fun sweepGradient() { + if (mConvertColorsArray == null) { + return + } + val position = FloatArray(2) + position[0] = 0.0f; + position[1] = mProgress.toFloat() * 0.01f + Log.d(TAG, "mProgress" + mProgress.toString()) + val sweepGradient = SweepGradient((measuredWidth / 2).toFloat(), (measuredHeight/ 2).toFloat(), mConvertColorsArray!!, position) + val matrix = Matrix() + matrix.setRotate(-90F, (measuredWidth / 2).toFloat(), (measuredHeight / 2).toFloat()) + sweepGradient.setLocalMatrix(matrix); + mProgPaint.setShader(sweepGradient) + } + override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) + Log.d(TAG, "onDraw") canvas?.let { mRectF?.let { it1 -> it.drawArc(it1, 0.0f, 360.0f, false, mBackPaint) } mRectF?.let { it1 -> - it.drawArc(it1, 275.0f, - (360 * mProgress / 100).toFloat(), false, mProgPaint) + sweepGradient() + var degree: Float = 3.6f * (mProgress.toFloat()) + it.drawArc(it1, 275.0f, degree, false, mProgPaint) } } @@ -136,11 +158,13 @@ class CircularProgressView @JvmOverloads constructor( val animator = ValueAnimator.ofInt(mProgress, progress) animator.addUpdateListener { mProgress = it.animatedValue as Int + Log.d(TAG, "setProgress" + mProgress.toString()) invalidate() } - animator.interpolator = OvershootInterpolator() + animator.interpolator = LinearInterpolator() animator.duration = animTime animator.start() + } } @@ -192,17 +216,17 @@ class CircularProgressView @JvmOverloads constructor( } + fun setProgColor(startColor: Int, endColor: Int) { - mColorArray = intArrayOf(ContextCompat.getColor(context, startColor), ContextCompat.getColor(context, endColor)) - mColorArray?.let { - if (mRectF != null) { - mProgPaint.shader = LinearGradient(0f, 0f, 0f, - getMeasuredWidth().toFloat(), mColorArray!![0], mColorArray!![1], Shader.TileMode.MIRROR) - } - } - - Log.d(TAG, "setProgColor:" + getMeasuredWidth().toString()) - + mConvertColorsArray = intArrayOf(ContextCompat.getColor(context, startColor), ContextCompat.getColor(context, endColor)) +// mColorArray?.let { +// if (mRectF != null) { +//// mProgPaint.shader = LinearGradient(0f, 0f, 0f, +//// getMeasuredWidth().toFloat(), mColorArray!![0], mColorArray!![1], Shader.TileMode.MIRROR) +// Log.d(TAG, "setProgColor:" + getMeasuredWidth().toString() + "mProgress:" + mProgress.toString()) +// sweepGradient() +// } +// } } fun setProgColor(colorArray: IntArray) { @@ -210,8 +234,8 @@ class CircularProgressView @JvmOverloads constructor( if (it.size < 2) { return } - mColorArray = it.copyOf() - mColorArray?.let { + mConvertColorsArray = it.copyOf() + mConvertColorsArray?.let { mProgPaint.shader = LinearGradient(0f, 0f, 0f, getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java index 021be5f6e9..f22e98bab0 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java @@ -78,16 +78,16 @@ public class SteeringWheelView extends ConstraintLayout { steeringCircularV = findViewById(R.id.steering_circular); steeringCircularV.setBackWidth(8); steeringCircularV.setBackColor(R.color.hmi_light_back_bg); + steeringCircularV.setProgress((int) (270 * 100) / 360, 2000); steeringCircularV.setProgColor(R.color.hmi_light_blue, R.color.hmi_dark_blue); - steeringCircularV.setProgress((int) (180 * 100) / 360, 1000); if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { steeringCircularVAlpha = findViewById(R.id.steering_circular_alpha); + steeringCircularVAlpha.setProgress((int) (270 * 100) / 360, 2000); steeringCircularV.setProgColor(R.color.hmi_dark_blue, R.color.hmi_light_blue); steeringCircularVAlpha.setBackWidth(8); steeringCircularVAlpha.setBackColor(R.color.hmi_clear_00); steeringCircularVAlpha.setProgColor(R.color.hmi_light_blue_alpha_ff, R.color.hmi_light_blue_alpha_00); steeringCircularVAlpha.setBlurMaskFilter(BlurMaskFilter.Blur.NORMAL, 12); - steeringCircularVAlpha.setProgress((int) (180 * 100) / 360, 1000); } } From 4cd46028dc67211b28cc13c3a482d322688372b5 Mon Sep 17 00:00:00 2001 From: liujing Date: Wed, 1 Jun 2022 18:20:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81,=E6=B7=BB=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/widget/CircularProgressView.kt | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt index 0fcf706bb7..214cd5e923 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt @@ -59,7 +59,6 @@ class CircularProgressView @JvmOverloads constructor( mProgPaint.isDither = true // 设置抖动 mProgPaint.strokeWidth = typedArray.getDimension(R.styleable.CircularProgressView_progWidth, 10.0f) mProgPaint.color = typedArray.getColor(R.styleable.CircularProgressView_progColor, Color.BLUE) -// mProgPaint.setPathEffect() // 初始化进度圆环渐变色 val startColor = typedArray.getColor(R.styleable.CircularProgressView_progStartColor, -1) val firstColor = typedArray.getColor(R.styleable.CircularProgressView_progFirstColor, -1) @@ -81,19 +80,17 @@ class CircularProgressView @JvmOverloads constructor( val mRectT = getPaddingTop() + (viewHigh - mRectLength) / 2 mRectF = RectF(mRectL.toFloat(), mRectT.toFloat(), (mRectL + mRectLength).toFloat(), (mRectT + mRectLength).toFloat()) -// // 设置进度圆环渐变色 -// mColorArray?.let { -//// mProgPaint.shader = LinearGradient( -//// 0f, 0f, 0f, -//// measuredWidth.toFloat(), mColorArray!![0], mColorArray!![1], Shader.TileMode.MIRROR) -// sweepGradient() -// } - Log.d(TAG, mRectL.toString() + "," + mRectT.toString()) - Log.d(TAG, mRectF.toString() + "," + "width:" + measuredWidth.toString() + "," + "PaddingLeft:" + getPaddingLeft().toString()) + Log.d(TAG, "onMeasure:" + mRectF.toString() + "," + "width:" + measuredWidth.toString() + "," + "PaddingLeft:" + getPaddingLeft().toString()) } - //渐变色 + /** + * 渐变色执行方法 + * sweepGradient扫描渐变,前两个参数为中心坐标 + * mConvertColorsArray:渐变色数组 + * position:与渐变数组个数对应的渐变点 + * Matrix:改变开始渐变的角度,默认3点方向,改为12点方向 + * */ fun sweepGradient() { if (mConvertColorsArray == null) { return @@ -101,8 +98,7 @@ class CircularProgressView @JvmOverloads constructor( val position = FloatArray(2) position[0] = 0.0f; position[1] = mProgress.toFloat() * 0.01f - Log.d(TAG, "mProgress" + mProgress.toString()) - val sweepGradient = SweepGradient((measuredWidth / 2).toFloat(), (measuredHeight/ 2).toFloat(), mConvertColorsArray!!, position) + val sweepGradient = SweepGradient((measuredWidth / 2).toFloat(), (measuredHeight / 2).toFloat(), mConvertColorsArray!!, position) val matrix = Matrix() matrix.setRotate(-90F, (measuredWidth / 2).toFloat(), (measuredHeight / 2).toFloat()) sweepGradient.setLocalMatrix(matrix); @@ -216,17 +212,8 @@ class CircularProgressView @JvmOverloads constructor( } - fun setProgColor(startColor: Int, endColor: Int) { mConvertColorsArray = intArrayOf(ContextCompat.getColor(context, startColor), ContextCompat.getColor(context, endColor)) -// mColorArray?.let { -// if (mRectF != null) { -//// mProgPaint.shader = LinearGradient(0f, 0f, 0f, -//// getMeasuredWidth().toFloat(), mColorArray!![0], mColorArray!![1], Shader.TileMode.MIRROR) -// Log.d(TAG, "setProgColor:" + getMeasuredWidth().toString() + "mProgress:" + mProgress.toString()) -// sweepGradient() -// } -// } } fun setProgColor(colorArray: IntArray) {