欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

Android

當(dāng)前位置:主頁 > 軟件編程 > Android >

Android實現(xiàn)圓形漸變加載進(jìn)度條

來源:本站原創(chuàng)|時間:2020-01-10|欄目:Android|點擊: 次

最近設(shè)計要求要一個圓形進(jìn)度條漸變的需求:

1.畫圓形進(jìn)度條

2.解決漸變

最終實現(xiàn)效果代碼

package com.view;
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.RectF;
import android.graphics.SweepGradient;
import android.util.AttributeSet;
import android.view.View;
import com.fx.R;
public class CompletedView extends View {

  // 畫實心圓的畫筆
  private Paint mCirclePaint;
  // 畫圓環(huán)的畫筆
  private Paint mRingPaint;
  // 畫圓環(huán)的畫筆背景色
  private Paint mRingPaintBg;
  // 畫字體的畫筆
  private Paint mTextPaint;
  // 圓形顏色
  private int mCircleColor;
  // 圓環(huán)顏色
  private int mRingColor;
  // 圓環(huán)背景顏色
  private int mRingBgColor;
  // 半徑
  private float mRadius;
  // 圓環(huán)半徑
  private float mRingRadius;
  // 圓環(huán)寬度
  private float mStrokeWidth;
  // 圓心x坐標(biāo)
  private int mXCenter;
  // 圓心y坐標(biāo)
  private int mYCenter;
  // 字的長度
  private float mTxtWidth;
  // 字的高度
  private float mTxtHeight;
  // 總進(jìn)度
  private int mTotalProgress = 100;
  // 當(dāng)前進(jìn)度
  private int mProgress;

  private String string;

  public CompletedView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // 獲取自定義的屬性
    initAttrs(context, attrs);
    initVariable();
  }

  //屬性
  private void initAttrs(Context context, AttributeSet attrs) {
    TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs,
        R.styleable.TasksCompletedView, 0, 0);
    mRadius = typeArray.getDimension(R.styleable.TasksCompletedView_radius, 80);
    mStrokeWidth = typeArray.getDimension(R.styleable.TasksCompletedView_strokeWidth, 10);
    mCircleColor = typeArray.getColor(R.styleable.TasksCompletedView_circleColor, 0xFFFFFFFF);
    mRingColor = typeArray.getColor(R.styleable.TasksCompletedView_ringColor, 0xFFFFFFFF);
    mRingBgColor = typeArray.getColor(R.styleable.TasksCompletedView_ringBgColor, 0xFFFFFFFF);

    mRingRadius = mRadius + mStrokeWidth / 2;
  }
  RectF oval;
  //初始化畫筆
  private void initVariable() {
    oval = new RectF();
    //內(nèi)圓
    mCirclePaint = new Paint();
    mCirclePaint.setAntiAlias(true);
    mCirclePaint.setColor(mCircleColor);
    mCirclePaint.setStyle(Paint.Style.FILL);
    mCirclePaint.setStrokeCap(Paint.Cap.ROUND);

    //外圓弧背景
    mRingPaintBg = new Paint();
    mRingPaintBg.setAntiAlias(true);
    mRingPaintBg.setColor(mRingBgColor);
    mRingPaintBg.setStyle(Paint.Style.STROKE);
    mRingPaintBg.setStrokeWidth(mStrokeWidth);


    //外圓弧
    mRingPaint = new Paint();
    mRingPaint.setAntiAlias(true);
//    mRingPaint.setColor(mRingColor);
    mRingPaint.setStyle(Paint.Style.STROKE);
    mRingPaint.setStrokeWidth(mStrokeWidth);
    mRingPaint.setStrokeCap(Paint.Cap.ROUND);//設(shè)置線冒樣式,有圓 有方


    //中間字
    mTextPaint = new Paint();
    mTextPaint.setAntiAlias(true);
    mTextPaint.setStyle(Paint.Style.FILL);
    mTextPaint.setColor(mRingColor);
    mTextPaint.setTextSize(mRadius / 2);

    Paint.FontMetrics fm = mTextPaint.getFontMetrics();
    mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent);
  }
  SweepGradient sweepGradient;
  //畫圖
  @Override
  protected void onDraw(Canvas canvas) {
    mXCenter = getWidth() / 2;
    mYCenter = getHeight() / 2;

    //內(nèi)圓
    canvas.drawCircle(mXCenter, mYCenter, mRadius, mCirclePaint);

    //外圓弧背景
    RectF oval1 = new RectF();
    oval1.left = (mXCenter - mRingRadius);
    oval1.top = (mYCenter - mRingRadius);
    oval1.right = mRingRadius * 2 + (mXCenter - mRingRadius);
    oval1.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);
    canvas.drawArc(oval1, 0, 360, false, mRingPaintBg); //圓弧所在的橢圓對象、圓弧的起始角度、圓弧的角度、是否顯示半徑連線

    //外圓弧
    if (mProgress > 0 ) {

      oval.left = (mXCenter - mRingRadius);
      oval.top = (mYCenter - mRingRadius);
      oval.right = mRingRadius * 2 + (mXCenter - mRingRadius);
      oval.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);
      if (sweepGradient==null) {
        int[] arcColors= new int[]{mRingColor,Color.parseColor("#b05e39"),mRingColor};
        float[] arcPostion=new float[]{0.0f,0.5f,0.95f};
//        sweepGradient = new SweepGradient(mXCenter, mYCenter, mRingColor,Color.parseColor("#b05e39"));
        sweepGradient = new SweepGradient(mXCenter, mYCenter, arcColors,arcPostion);

        Matrix matrix = new Matrix();
        matrix.setRotate(-90,mXCenter,mYCenter);
        sweepGradient.setLocalMatrix(matrix);
        mRingPaint.setShader(sweepGradient);
      }
      canvas.drawArc(oval, -90, ((float)mProgress / mTotalProgress) * 360, false, mRingPaint); //

      //字體
      String txt = mProgress + "%";
      mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());
      canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4, mTextPaint);
    }
  }
  public void setText(String string){

  }

  //設(shè)置進(jìn)度
  public void setProgress(int progress) {
    mProgress = progress;
    postInvalidate();//重繪
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:android開發(fā)環(huán)境中SDK文件夾下的所需內(nèi)容詳解

欄    目:Android

下一篇:Emoji表情在Android JNI中的兼容性問題詳解

本文標(biāo)題:Android實現(xiàn)圓形漸變加載進(jìn)度條

本文地址:http://mengdiqiu.com.cn/a1/Android/9200.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有