国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android實現(xiàn)漸變色的圓弧虛線效果

2019-12-12 04:55:33
字體:
供稿:網(wǎng)友

首先來看看效果圖:


1,SweepGradient(梯度渲染)

public SweepGradient (float cx, float cy, int[] colors, float[] positions)

掃描渲染,就是以某個點位中心旋轉(zhuǎn)一周所形成的效果!參數(shù)依次是:

      cx:掃描的中心x坐標(biāo)

      cy:掃描的中心y坐標(biāo)

      colors:梯度漸變的顏色數(shù)組

      positions:指定顏色數(shù)組的相對位置

public static final int[] SWEEP_GRADIENT_COLORS = new int[]{Color.GREEN, Color.GREEN, Color.BLUE, Color.RED, Color.RED};mColorShader = new SweepGradient(radius, radius,SWEEP_GRADIENT_COLORS,null);

效果圖:


SweepGradient

2,DashPathEffect(Path的線段虛線化)

DashPathEffect(float[] intervals, float phase)

      intervals:為虛線的ON和OFF的數(shù)組,數(shù)組中元素數(shù)目需要 >= 2

      phase:為繪制時的偏移量

//計算路徑的長度PathMeasure pathMeasure = new PathMeasure(mPath, false);float length = pathMeasure.getLength();float step = length / 60;dashPathEffect = new DashPathEffect(new float[]{step / 3, step * 2 / 3}, 0);

效果圖:


DashPathEffect

3,下面是全部的代碼:

package com.example.yyw.xfermodedemo;import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.DashPathEffect;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PathMeasure;import android.graphics.RectF;import android.graphics.SweepGradient;import android.util.AttributeSet;import android.view.View;/** * Created by yyw on 2016/10/11. */public class OilTableLine extends View { public static final int[] SWEEP_GRADIENT_COLORS = new int[]{Color.GREEN, Color.GREEN, Color.BLUE, Color.RED, Color.RED}; private int tableWidth = 50; private Paint mPaint; private Path mPath; private RectF mTableRectF; //把路徑分成虛線段的 private DashPathEffect dashPathEffect; //給路徑上色 private SweepGradient mColorShader; //指針的路徑 private Path mPointerPath; private float mCurrentDegree = 60; public OilTableLine(Context context, AttributeSet attrs) {  super(context, attrs);  mPaint = new Paint();  mPaint.setAntiAlias(true);  mPaint.setDither(true);  mPaint.setColor(Color.BLACK);  mPath = new Path();  mPointerPath = new Path();  startAnimator(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {  super.onSizeChanged(w, h, oldw, oldh);  float size = Math.min(w, h) - tableWidth * 2;  //油表的位置方框  mTableRectF = new RectF(0, 0, size, size);  mPath.reset();  //在油表路徑中增加一個從起始弧度  mPath.addArc(mTableRectF, 60, 240);  //計算路徑的長度  PathMeasure pathMeasure = new PathMeasure(mPath, false);  float length = pathMeasure.getLength();  float step = length / 60;  dashPathEffect = new DashPathEffect(new float[]{step / 3, step * 2 / 3}, 0);  float radius = size / 2;  mColorShader = new SweepGradient(radius, radius,SWEEP_GRADIENT_COLORS,null);  //設(shè)置指針的路徑位置  mPointerPath.reset();  mPointerPath.moveTo(radius, radius - 20);  mPointerPath.lineTo(radius, radius + 20);  mPointerPath.lineTo(radius * 2 - tableWidth, radius);  mPointerPath.close(); } @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  float dx = (getWidth() - mTableRectF.width()) / 2;  float dy = (getHeight() - mTableRectF.height()) / 2;  //把油表的方框平移到正中間  canvas.translate(dx, dy);  canvas.save();  //旋轉(zhuǎn)畫布  canvas.rotate(90, mTableRectF.width() / 2, mTableRectF.height() / 2);  mPaint.setStyle(Paint.Style.STROKE);  mPaint.setStrokeWidth(tableWidth);  mPaint.setPathEffect(dashPathEffect);  mPaint.setShader(mColorShader);  canvas.drawPath(mPath, mPaint);  canvas.restore();  //還原畫筆  mPaint.setPathEffect(null);  mPaint.setShader(null);  mPaint.setStyle(Paint.Style.FILL);  mPaint.setStrokeWidth(tableWidth / 10);  canvas.save();  canvas.rotate(150 + mCurrentDegree, mTableRectF.width() / 2, mTableRectF.height() / 2);  canvas.drawPath(mPointerPath, mPaint);  canvas.restore(); } public void startAnimator() {  ValueAnimator animator = ValueAnimator.ofFloat(0, 240);  animator.setDuration(40000);  animator.setRepeatCount(ValueAnimator.INFINITE);  animator.setRepeatMode(ValueAnimator.RESTART);  animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {   @Override   public void onAnimationUpdate(ValueAnimator animation) {    mCurrentDegree = (int) (0 + (Float) animation.getAnimatedValue());    invalidate();   }  });  animator.start(); }}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 壤塘县| 福贡县| 盖州市| 江永县| 泉州市| 新郑市| 弥渡县| 吴堡县| 神木县| 盐山县| 宁都县| 耒阳市| 都江堰市| 甘肃省| 兴海县| 满洲里市| 额济纳旗| 平舆县| 涡阳县| 涟水县| 巨鹿县| 祁连县| 汝南县| 宁陵县| 教育| 盘山县| 泰顺县| 佛山市| 和政县| 乐昌市| 三穗县| 江口县| 福州市| 肇州县| 呈贡县| 广德县| 营山县| 井陉县| 高州市| 古浪县| 沽源县|