From 3bd6e9023e011336da840e11a9d48bb31c7a0261 Mon Sep 17 00:00:00 2001 From: 陈奇 <1650699704@qq.com> Date: Wed, 07 Nov 2018 09:31:59 +0800 Subject: [PATCH] [*]将电磁版本的唤醒心跳改成两秒,唤醒之后回到30一次心跳 [*]整体版本页面显示的绝对安全换成了安全 [*]自定义语音修改和优化,添加了无声的选择 --- app/src/main/java/com/moral/yunfushao/ui/PanelView.java | 220 ++++++++++++++++++++++++++++++++---------------------- 1 files changed, 131 insertions(+), 89 deletions(-) diff --git a/app/src/main/java/com/moral/yunfushao/ui/PanelView.java b/app/src/main/java/com/moral/yunfushao/ui/PanelView.java index 785329a..29056eb 100644 --- a/app/src/main/java/com/moral/yunfushao/ui/PanelView.java +++ b/app/src/main/java/com/moral/yunfushao/ui/PanelView.java @@ -1,5 +1,6 @@ package com.moral.yunfushao.ui; +import android.animation.ValueAnimator; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; @@ -28,7 +29,11 @@ private int mmHeight; //��������������������������� private Paint mShaderPaint; - private int[] mshaderColor = new int[]{Color.RED, Color.RED, Color.GREEN, Color.GREEN, Color.YELLOW, Color.YELLOW, Color.RED}; + private int[] mshaderColor = new int[]{0xfff70e17, 0xfff70e17, 0xfff70e17, 0xffff5c92, 0xff00c44a, 0xff00d062, 0xff00f5af, 0xff00f6cb, 0xff00ccff, 0xff179fff, 0xffa054ff, 0xffa53aff, 0xffd74bff, 0xfff64da5, 0xfff70e17}; + private int[] mshaderRedColor = new int[]{0xfff70e17, 0xffff5c92}; + private int[] mshaderZiseColor = new int[]{0xffa53aff, 0xffd74bff, 0xfff64da5}; + private int[] mshaderBlueColor = new int[]{0xff00f6cb, 0xff00ccff, 0xff179fff, 0xffa054ff}; + private int[] mshaderGreenColor = new int[]{0xff00c44a, 0xff00d062, 0xff00f5af}; //������������������������ private SweepGradient mSweepGradient; private int mShaderWidth = 70; @@ -36,11 +41,11 @@ private Paint paintGapLine; //������������������3����������� - private int line1Color = 0xFFFAEAEB; + private int line1Color = 0xffb8e8f4; //������������������15����������� - private int line2Color = 0xFFFEB7B9; + private int line2Color = 0xff7ed3ff; //������������������60����������� - private int line3Color = 0xFFFF6C7E; + private int line3Color = 0xff009cff; //������������ private int line1Length = 50; //������������ @@ -55,33 +60,42 @@ private Paint drawTextPaint; private int textColor = Color.GRAY; private int textSize = 36; - private String[] level = {"������","���������","���������","���������"}; + private String[] level = {"������", "������������", "������������", "������������"}; //������������ private Paint mCirclePaint; - private int innerCircleColor = 0xFFF6DFE1; + private int innerCircleColor = 0xffb8e8f4; private int mCircleWidth = 70; private int innerPadding = 20; //��������� private Paint mProgressPaint; - private int progressCircleColor = 0xFFFEB7B9; + private int progressCircleColor = 0xff53c9ff; //��������� private Paint mBitPaint; private Bitmap mBitmap; private float percent = 0;//��������������� + private float percent2 = (float) 0.27;//��������������� + private String statusStr = "���������"; + private ValueAnimator anim; - public void setStatusStr(String statusStr){ + public void setStatusStr(String statusStr) { this.statusStr = statusStr; postInvalidate(); } - public void setPercent(float percent){ + public void setPercent(float percent) { this.percent = percent; +// this.percent2 = percent; postInvalidate(); +// if (anim.isStarted() || anim.isRunning()) { +// anim.end(); +// anim.cancel(); +// } +// anim.start(); } public PanelView(Context context) { @@ -102,15 +116,15 @@ private void init(Context mContext) { this.mContext = mContext; //��������� - mShaderWidth = dip2px(mContext,24); - line1Length = dip2px(mContext,14); - line2Length = dip2px(mContext,22); - lineWidth = dip2px(mContext,2); - widthInner = dip2px(mContext,40); - paddingKedu = dip2px(mContext,10); - mCircleWidth = dip2px(mContext,24); - innerPadding = dip2px(mContext,8); - textSize = dip2px(mContext,12); + mShaderWidth = dip2px(mContext, 24); + line1Length = dip2px(mContext, 14); + line2Length = dip2px(mContext, 22); + lineWidth = dip2px(mContext, 2); + widthInner = dip2px(mContext, 40); + paddingKedu = dip2px(mContext, 10); + mCircleWidth = dip2px(mContext, 24); + innerPadding = dip2px(mContext, 8); + textSize = dip2px(mContext, 12); //������������ mShaderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -119,7 +133,7 @@ mShaderPaint.setStrokeCap(Paint.Cap.ROUND); paintGapLine = new Paint(Paint.ANTI_ALIAS_FLAG); paintGapLine.setColor(Color.WHITE); - paintGapLine.setStrokeWidth(dip2px(mContext,3)); + paintGapLine.setStrokeWidth(dip2px(mContext, 3)); //������ mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mLinePaint.setStyle(Paint.Style.STROKE); @@ -145,7 +159,8 @@ mBitPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBitPaint.setFilterBitmap(true); mBitPaint.setDither(true); - mBitmap = ((BitmapDrawable)mContext.getResources().getDrawable(R.mipmap.zhizhen)).getBitmap(); + mBitmap = ((BitmapDrawable) mContext.getResources().getDrawable(R.mipmap.zhizhen)).getBitmap(); +// startAnimation(); } @Override @@ -165,50 +180,76 @@ } else { mmHeight = dip2px(mContext, 300); } - mWidth = mmWidth<mmHeight?mmWidth:mmHeight; + mWidth = mmWidth < mmHeight ? mmWidth : mmHeight; setMeasuredDimension(mmWidth, mmHeight); } + +// private void startAnimation() { +// anim = ValueAnimator.ofObject(new CustomPointEvaluator(),(float)0, percent2); +// anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { +// @Override +// public void onAnimationUpdate(ValueAnimator animation) { +// percent = (float) animation.getAnimatedValue(); +// System.out.println("chenqi rotato " + percent + " all -> " + percent2 * 300); +//// invalidate(); +// } +// }); +// anim.setDuration(3000L); +// anim.setRepeatCount(Animation.INFINITE); +// } +// +// private class CustomPointEvaluator implements TypeEvaluator<Float> { +// @Override +// public Float evaluate(float fraction, Float startValue, Float endValue) { +// System.out.println("chenqi2 rotato " + fraction + " all -> " + endValue); +// float y = fraction * endValue; +// return y; +// } +// } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - //��������� + //��������� drawKedu(canvas); //��������������� drawTextKedu(canvas); //��������������� drawJianbianCircle(canvas); //��������� - RectF cirlcleRect = new RectF(mShaderWidth + widthInner+mCircleWidth+innerPadding, mShaderWidth + widthInner+mCircleWidth+innerPadding, mWidth - mShaderWidth - widthInner-mCircleWidth-innerPadding, mWidth - mShaderWidth - widthInner-mCircleWidth-innerPadding); + RectF cirlcleRect = new RectF(mShaderWidth + widthInner + mCircleWidth + innerPadding, mShaderWidth + widthInner + mCircleWidth + innerPadding, mWidth - mShaderWidth - widthInner - mCircleWidth - innerPadding, mWidth - mShaderWidth - widthInner - mCircleWidth - innerPadding); canvas.drawArc(cirlcleRect, 0, 360, false, mCirclePaint); //��������� - float circleR = (cirlcleRect.right - cirlcleRect.left)/2; + float circleR = (cirlcleRect.right - cirlcleRect.left) / 2; float bitH = circleR; - float bitW = bitH*0.448f; + float bitW = bitH * 0.448f; canvas.save(); - canvas.rotate(percent*300-150,mWidth/2,mWidth/2); - RectF btmRect = new RectF((float) (cirlcleRect.left+bitH-bitW*0.535), (float) (cirlcleRect.top+mCircleWidth*0.68),(float) (cirlcleRect.left+bitH+bitW*0.465), (float) (cirlcleRect.top+bitH+mCircleWidth*0.68)); + canvas.rotate(percent * 300 - 150, mWidth / 2, mWidth / 2); + RectF btmRect = new RectF((float) (cirlcleRect.left + bitH - bitW * 0.535), (float) (cirlcleRect.top + mCircleWidth * 0.68), (float) (cirlcleRect.left + bitH + bitW * 0.465), (float) (cirlcleRect.top + bitH + mCircleWidth * 0.68)); // Log.d("haijiang","left="+btmRect.left); // Log.d("haijiang","right="+btmRect.right); // Log.d("haijiang","top="+btmRect.top); // Log.d("haijiang","bottom="+btmRect.bottom); // Log.d("haijiang","������������="+(btmRect.right-btmRect.left)/(btmRect.bottom-btmRect.top)); - canvas.drawBitmap(mBitmap,null,btmRect,mBitPaint); + canvas.drawBitmap(mBitmap, null, btmRect, mBitPaint); canvas.restore(); drawTextPaint.setColor(line3Color); drawTextPaint.setTextSize(textSize); int statusStrWidth = (int) drawTextPaint.measureText(this.statusStr); - canvas.drawText(this.statusStr,mWidth / 2-statusStrWidth/2, mWidth/2+(btmRect.bottom-btmRect.top)/2,drawTextPaint); - if(percent>0) - canvas.drawArc(new RectF(mShaderWidth + widthInner+mCircleWidth+innerPadding, mShaderWidth + widthInner+mCircleWidth+innerPadding, mWidth - mShaderWidth - widthInner-mCircleWidth-innerPadding, mWidth - mShaderWidth - widthInner-mCircleWidth-innerPadding), 120, 300*percent, false, mProgressPaint); + canvas.drawText(this.statusStr, mWidth / 2 - statusStrWidth / 2, mWidth / 2 + (btmRect.bottom - btmRect.top) / 2, drawTextPaint); + if (percent > 0) + canvas.drawArc(new RectF(mShaderWidth + widthInner + mCircleWidth + innerPadding, mShaderWidth + widthInner + mCircleWidth + innerPadding, mWidth - mShaderWidth - widthInner - mCircleWidth - innerPadding, mWidth - mShaderWidth - widthInner - mCircleWidth - innerPadding), + 120, 300 * percent, false, mProgressPaint); } /** * ��������� + * * @param canvas */ - private void drawKedu(Canvas canvas){ + private void drawKedu(Canvas canvas) { //��������������� for (int i = 0; i <= 50; i++) { canvas.save(); @@ -241,85 +282,86 @@ /** * ��������������� + * * @param canvas */ - private void drawTextKedu(Canvas canvas){ - for(int i=0;i<level.length;i++){ + private void drawTextKedu(Canvas canvas) { + for (int i = 0; i < level.length; i++) { float textWidth = drawTextPaint.measureText(level[i]); - if(percent<0.125){ - if(i==0){ + if (percent < 0.25) { + if (i == 0) { drawTextPaint.setColor(line3Color); - }else{ + } else { drawTextPaint.setColor(Color.GRAY); } canvas.save(); - if(i==0){ - canvas.rotate(-150,mWidth/2,mWidth/2); - }else if(i==1){ - canvas.rotate(-120,mWidth/2,mWidth/2); - }else if(i==2){ - canvas.rotate(0,mWidth/2,mWidth/2); - }else if(i==3){ - canvas.rotate(120,mWidth/2,mWidth/2); + if (i == 0) { + canvas.rotate(-120, mWidth / 2, mWidth / 2); + } else if (i == 1) { + canvas.rotate(-45, mWidth / 2, mWidth / 2); + } else if (i == 2) { + canvas.rotate(45, mWidth / 2, mWidth / 2); + } else if (i == 3) { + canvas.rotate(120, mWidth / 2, mWidth / 2); } - canvas.drawText(level[i],mWidth / 2-textWidth/2, paddingKedu+line2Length+textSize,drawTextPaint); + canvas.drawText(level[i], mWidth / 2 - textWidth / 2, paddingKedu + line2Length + textSize, drawTextPaint); canvas.restore(); - }else if(percent>=0.125&&percent<0.4){ - if(i==1){ + } else if (percent >= 0.25 && percent < 0.5) { + if (i == 1) { drawTextPaint.setColor(line3Color); - }else{ + } else { drawTextPaint.setColor(Color.GRAY); } canvas.save(); // canvas.rotate(-120+i*75,mWidth/2,mWidth/2); - if(i==0){ - canvas.rotate(-150,mWidth/2,mWidth/2); - }else if(i==1){ - canvas.rotate(-120,mWidth/2,mWidth/2); - }else if(i==2){ - canvas.rotate(0,mWidth/2,mWidth/2); - }else if(i==3){ - canvas.rotate(120,mWidth/2,mWidth/2); + if (i == 0) { + canvas.rotate(-120, mWidth / 2, mWidth / 2); + } else if (i == 1) { + canvas.rotate(-45, mWidth / 2, mWidth / 2); + } else if (i == 2) { + canvas.rotate(45, mWidth / 2, mWidth / 2); + } else if (i == 3) { + canvas.rotate(120, mWidth / 2, mWidth / 2); } - canvas.drawText(level[i],mWidth / 2-textWidth/2, paddingKedu+line2Length+textSize,drawTextPaint); + canvas.drawText(level[i], mWidth / 2 - textWidth / 2, paddingKedu + line2Length + textSize, drawTextPaint); canvas.restore(); - }else if(percent>=0.4&&percent<1.0){ - if(i==2){ + } else if (percent >= 0.5 && percent < 0.75) { + if (i == 2) { drawTextPaint.setColor(line3Color); - }else{ + } else { drawTextPaint.setColor(Color.GRAY); } canvas.save(); // canvas.rotate(-120+i*75,mWidth/2,mWidth/2); - if(i==0){ - canvas.rotate(-150,mWidth/2,mWidth/2); - }else if(i==1){ - canvas.rotate(-120,mWidth/2,mWidth/2); - }else if(i==2){ - canvas.rotate(0,mWidth/2,mWidth/2); - }else if(i==3){ - canvas.rotate(120,mWidth/2,mWidth/2); + if (i == 0) { + canvas.rotate(-120, mWidth / 2, mWidth / 2); + } else if (i == 1) { + canvas.rotate(-45, mWidth / 2, mWidth / 2); + } else if (i == 2) { + canvas.rotate(45, mWidth / 2, mWidth / 2); + } else if (i == 3) { + canvas.rotate(120, mWidth / 2, mWidth / 2); } - canvas.drawText(level[i],mWidth / 2-textWidth/2, paddingKedu+line2Length+textSize,drawTextPaint); + canvas.drawText(level[i], mWidth / 2 - textWidth / 2, paddingKedu + line2Length + textSize, drawTextPaint); canvas.restore(); - }else if(percent>=1.0){ - if(i==3){ + } else if (percent >= 0.75) { + if (i == 3) { drawTextPaint.setColor(line3Color); - }else{ + } else { drawTextPaint.setColor(Color.GRAY); } canvas.save(); // canvas.rotate(-105+i*75,mWidth/2,mWidth/2); - if(i==0){ - canvas.rotate(-150,mWidth/2,mWidth/2); - }else if(i==1){ - canvas.rotate(-120,mWidth/2,mWidth/2); - }else if(i==2){ - canvas.rotate(0,mWidth/2,mWidth/2); - }else if(i==3){ - canvas.rotate(120,mWidth/2,mWidth/2); + if (i == 0) { + canvas.rotate(-120, mWidth / 2, mWidth / 2); + } else if (i == 1) { + canvas.rotate(-45, mWidth / 2, mWidth / 2); + } else if (i == 2) { + canvas.rotate(45, mWidth / 2, mWidth / 2); + } else if (i == 3) { + canvas.rotate(120, mWidth / 2, mWidth / 2); } - canvas.drawText(level[i],mWidth / 2-textWidth/2, paddingKedu+line2Length+textSize,drawTextPaint); + canvas.drawText(level[i], mWidth / 2 - textWidth / 2, paddingKedu + line2Length + textSize, drawTextPaint); canvas.restore(); } } @@ -327,25 +369,25 @@ /** * ��������������� + * * @param canvas */ - private void drawJianbianCircle(Canvas canvas){ + private void drawJianbianCircle(Canvas canvas) { mSweepGradient = new SweepGradient(mWidth / 2, mWidth / 2, mshaderColor, null); mShaderPaint.setShader(mSweepGradient); - //145, 250 canvas.drawArc(new RectF(mShaderWidth + widthInner, mShaderWidth + widthInner, mWidth - mShaderWidth - widthInner, mWidth - mShaderWidth - widthInner), 120, 300, false, mShaderPaint); //��������������� canvas.save(); - canvas.rotate(120, mWidth / 2, mWidth / 2); - canvas.drawLine(mWidth / 2, line2Length + paddingKedu*3, mWidth / 2, (float) (line2Length + paddingKedu*0.65+mShaderWidth*2), paintGapLine); + canvas.rotate(75, mWidth / 2, mWidth / 2); + canvas.drawLine(mWidth / 2, line2Length + paddingKedu * 3, mWidth / 2, (float) (line2Length + paddingKedu * 0.65 + mShaderWidth * 2), paintGapLine); canvas.restore(); canvas.save(); canvas.rotate(0, mWidth / 2, mWidth / 2); - canvas.drawLine(mWidth / 2, line2Length + paddingKedu*3, mWidth / 2, (float) (line2Length + paddingKedu*0.65+mShaderWidth*2), paintGapLine); + canvas.drawLine(mWidth / 2, line2Length + paddingKedu * 3, mWidth / 2, (float) (line2Length + paddingKedu * 0.65 + mShaderWidth * 2), paintGapLine); canvas.restore(); canvas.save(); - canvas.rotate(-120, mWidth / 2, mWidth / 2); - canvas.drawLine(mWidth / 2, line2Length + paddingKedu*3, mWidth / 2, (float) (line2Length + paddingKedu*0.65+mShaderWidth*2), paintGapLine); + canvas.rotate(-75, mWidth / 2, mWidth / 2); + canvas.drawLine(mWidth / 2, line2Length + paddingKedu * 3, mWidth / 2, (float) (line2Length + paddingKedu * 0.65 + mShaderWidth * 2), paintGapLine); canvas.restore(); } -- Gitblit v1.8.0