欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android studio圓形進(jìn)度條 百分?jǐn)?shù)跟隨變化

 更新時(shí)間:2017年10月23日 09:29:23   作者:飛鳥(niǎo)96  
這篇文章主要為大家詳細(xì)介紹了Android studio圓形進(jìn)度條,百分號(hào)跟隨變化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android studio圓形進(jìn)度條展示的具體代碼,供大家參考,具體內(nèi)容如下

MainActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
 private Gua mGua1;
 private Button play;
 private Button resele;
 private Button dao;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mGua1 = (Gua) findViewById(R.id.Circle);
  mGua1.setTargetPercent(0);
  play=(Button)findViewById(R.id.play);
  resele=(Button)findViewById(R.id.resele);
  dao=(Button)findViewById(R.id.dao);

  play.setOnClickListener(this);
  resele.setOnClickListener(this);
  dao.setOnClickListener(this);
 }

 @Override
 public void onClick(View view) {
  switch (view.getId()){
   case R.id.play:
    //設(shè)置目標(biāo)百分比為100
    mGua1.setTargetPercent(100);
    mGua1.invalidate();
    break;
   case R.id.resele:
    //設(shè)置目標(biāo)百分比為0
    mGua1.setTargetPercent(0);
    mGua1.invalidate();
    break;
   case R.id.dao:
    //設(shè)置目標(biāo)百分比為100
    mGua1.setTargetPercent(0);
    mGua1.invalidate();
    break;
  }
 }
}

Gua

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class Gua extends View{
 private Paint mCirclePaint;
 private Paint mTextPaint;
 private Paint mArcPaint;
 private int mCircleX;
 private int mCircleY;
 private float mCurrentAngle;
 private RectF mArcRectF;
 private float mStartSweepValue;
 private float mTargetPercent;
 private float mCurrentPercent;

 private int mRadius;
 private int mCircleBackground;
 private int mRingColor;
 private int mTextSize;
 private int mTextColor;


 public Gua(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  init(context);
 }

 public Gua(Context context, AttributeSet attrs) {
  super(context, attrs);
  //自定義屬性 values/attr
  TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.PercentageRing);
  //中間圓的背景顏色 默認(rèn)為淺紫色
  mCircleBackground = typedArray.getColor(R.styleable.PercentageRing_circleBackground, 0xffafb4db);
  //外圓環(huán)的顏色 默認(rèn)為深紫色
  mRingColor = typedArray.getColor(R.styleable.PercentageRing_ringColor, 0xff6950a1);
  //中間圓的半徑 默認(rèn)為60
  mRadius = typedArray.getInt(R.styleable.PercentageRing_radius, 60);
  //字體顏色 默認(rèn)為白色
  mTextColor = typedArray.getColor(R.styleable.PercentageRing_textColor, 0xffffffff);
  //最后一定要調(diào)用這個(gè) 釋放掉TypedArray
  typedArray.recycle();
  //初始化數(shù)據(jù)
  init(context);
 }

 public Gua(Context context) {
  super(context);
  init(context);
 }

 private void init(Context context){
  //圓環(huán)開(kāi)始角度 -90° 正北方向
  mStartSweepValue = -90;
  //當(dāng)前角度
  mCurrentAngle = 0;
  //當(dāng)前百分比
  mCurrentPercent = 0;
  //設(shè)置中心園的畫(huà)筆
  mCirclePaint = new Paint();
  mCirclePaint.setAntiAlias(true);
  mCirclePaint.setColor(mCircleBackground);
  mCirclePaint.setStyle(Paint.Style.FILL);
  //設(shè)置文字的畫(huà)筆
  mTextPaint = new Paint();
  mTextPaint.setColor(mTextColor);
  mTextPaint.setAntiAlias(true);
  mTextPaint.setStyle(Paint.Style.FILL);
  mTextPaint.setStrokeWidth((float) (0.025*mRadius));
  mTextPaint.setTextSize(mRadius/2);
  mTextPaint.setTextAlign(Align.CENTER);
  //設(shè)置外圓環(huán)的畫(huà)筆
  mArcPaint = new Paint();
  mArcPaint.setAntiAlias(true);
  mArcPaint.setColor(mRingColor);
  mArcPaint.setStyle(Paint.Style.STROKE);
  mArcPaint.setStrokeWidth((float) (0.075*mRadius));
  //獲得文字的字號(hào) 因?yàn)橐O(shè)置文字在圓的中心位置
  mTextSize = (int) mTextPaint.getTextSize();


 }

 //主要是測(cè)量wrap_content時(shí)候的寬和高,因?yàn)閷捀咭粯?,只需要測(cè)量一次寬即可,高等于寬
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  setMeasuredDimension(measure(widthMeasureSpec), measure(widthMeasureSpec));
  //設(shè)置圓心坐標(biāo)
  mCircleX = getMeasuredWidth()/2;
  mCircleY = getMeasuredHeight()/2;
  //如果半徑大于圓心橫坐標(biāo),需要手動(dòng)縮小半徑的值,否則就畫(huà)到外面去了
  if (mRadius>mCircleX) {
   //設(shè)置半徑大小為圓心橫坐標(biāo)到原點(diǎn)的距離
   mRadius = mCircleX;
   mRadius = (int) (mCircleX-0.075*mRadius);
   //因?yàn)榘霃礁淖兞?,所以要重新設(shè)置一下字體寬度
   mTextPaint.setStrokeWidth((float) (0.025*mRadius));
   //重新設(shè)置字號(hào)
   mTextPaint.setTextSize(mRadius/2);
   //重新設(shè)置外圓環(huán)寬度
   mArcPaint.setStrokeWidth((float) (0.075*mRadius));
   //重新獲得字號(hào)大小
   mTextSize = (int) mTextPaint.getTextSize();
  }
  //畫(huà)中心園的外接矩形,用來(lái)畫(huà)圓環(huán)用
  mArcRectF = new RectF(mCircleX-mRadius, mCircleY-mRadius, mCircleX+mRadius, mCircleY+mRadius);
 }

 //當(dāng)wrap_content的時(shí)候,view的大小根據(jù)半徑大小改變,但最大不會(huì)超過(guò)屏幕
 private int measure(int measureSpec){
  int result=0;
  int specMode = MeasureSpec.getMode(measureSpec);
  int specSize = MeasureSpec.getSize(measureSpec);
  if (specMode == MeasureSpec.EXACTLY) {
   result = specSize;
  }else {
   result =(int) (1.075*mRadius*2);
   if (specMode == MeasureSpec.AT_MOST) {
    result = Math.min(result, specSize);
   }
  }
  return result;

 }
 //開(kāi)始畫(huà)中間圓、文字和外圓環(huán)
 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  //畫(huà)中間圓
  canvas.drawCircle(mCircleX, mCircleY, mRadius, mCirclePaint);
  //畫(huà)圓環(huán)
  canvas.drawArc(mArcRectF, mStartSweepValue ,mCurrentAngle, false, mArcPaint);
  //畫(huà)文字
  canvas.drawText(String.valueOf(mCurrentPercent)+"%", mCircleX, mCircleY+mTextSize/4, mTextPaint);
  //判斷當(dāng)前百分比是否小于設(shè)置目標(biāo)的百分比
  if (mCurrentPercent<mTargetPercent) {
   //當(dāng)前百分比+1
   mCurrentPercent+=1;
   //當(dāng)前角度+360
   mCurrentAngle+=3.6;
   //每10ms重畫(huà)一次
   postInvalidateDelayed(10);
  }/*else if(mCurrentPercent==mTargetPercent){
   //當(dāng)前百分比-1
   mCurrentPercent=0;
   //當(dāng)前角度+360
   mCurrentAngle=0;
   //每10ms重畫(huà)一次
   postInvalidateDelayed(10);
  }*/else if(mCurrentPercent>mTargetPercent){
   //當(dāng)前百分比-1
   mCurrentPercent-=1;
   //當(dāng)前角度+360
   mCurrentAngle-=3.6;
   //每10ms重畫(huà)一次
   postInvalidateDelayed(10);
  }

 }
 //設(shè)置目標(biāo)的百分比
 public void setTargetPercent(int percent){
  this.mTargetPercent = percent;
 }
}

Xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:orientation="vertical">
 <Button
  android:id="@+id/but1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="改變外層圓環(huán)顏色"
  />
 <com.bwie.test.wuxiaorui1508a20171009.Gua
  android:id="@+id/Circle"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:radius="90"
  app:textColor="#ffffffff"
  />
 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:gravity="center"
  >
  <Button
   android:id="@+id/play"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="開(kāi)始"
   />
  <Button
   android:id="@+id/resele"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="重置"
   />
  <Button
   android:id="@+id/dao"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="暫停"
   />
 </LinearLayout>
</LinearLayout>

values文件中的attrs

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <declare-styleable name="PercentageRing">
  <attr name="radius" format="integer"/>
  <attr name="circleBackground" format="color"/>
  <attr name="ringColor" format="color"/>
  <attr name="textColor" format = "color"/>

 </declare-styleable>
</resources>


效果展示:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android中的OpenGL使用配置詳解

    Android中的OpenGL使用配置詳解

    這篇文章主要為大家介紹了Android中的OpenGL使用配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • android 復(fù)制 粘貼 剪切功能應(yīng)用

    android 復(fù)制 粘貼 剪切功能應(yīng)用

    網(wǎng)上有很多android 復(fù)制 粘貼 剪切功能的文章,只是放到自己的程序中不知道如何處理,現(xiàn)在尋得一可行方法,需要的朋友可以參考下
    2012-11-11
  • Android?14新功能HighLights快速實(shí)現(xiàn)文本高亮

    Android?14新功能HighLights快速實(shí)現(xiàn)文本高亮

    這篇文章主要為大家介紹了Android?14新功能HighLights快速實(shí)現(xiàn)文本高亮示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Android利用SAX對(duì)XML進(jìn)行增刪改查操作詳解

    Android利用SAX對(duì)XML進(jìn)行增刪改查操作詳解

    在項(xiàng)目中會(huì)遇到對(duì)于XML的增刪改查,下面這篇文章主要給大家介紹了關(guān)于Android利用SAX對(duì)XML進(jìn)行增刪改查操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Android應(yīng)用程序轉(zhuǎn)到后臺(tái)并回到前臺(tái)判斷方法

    Android應(yīng)用程序轉(zhuǎn)到后臺(tái)并回到前臺(tái)判斷方法

    這篇文章主要介紹了Android應(yīng)用程序轉(zhuǎn)到后臺(tái)并回到前臺(tái)判斷方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Flutter學(xué)習(xí)教程之Route跳轉(zhuǎn)以及數(shù)據(jù)傳遞

    Flutter學(xué)習(xí)教程之Route跳轉(zhuǎn)以及數(shù)據(jù)傳遞

    這篇文章主要給大家介紹了關(guān)于Flutter學(xué)習(xí)教程之Route跳轉(zhuǎn)以及數(shù)據(jù)傳遞的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Android中RecyclerView點(diǎn)擊Item設(shè)置事件

    Android中RecyclerView點(diǎn)擊Item設(shè)置事件

    這篇文章主要介紹了Android中RecyclerView點(diǎn)擊Item設(shè)置事件的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Android下拉阻尼效果實(shí)現(xiàn)原理及簡(jiǎn)單實(shí)例

    Android下拉阻尼效果實(shí)現(xiàn)原理及簡(jiǎn)單實(shí)例

    這篇文章主要為大家詳細(xì)介紹了Android下拉阻尼效果實(shí)現(xiàn)原理及簡(jiǎn)單實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Android錄屏功能的實(shí)現(xiàn)

    Android錄屏功能的實(shí)現(xiàn)

    這篇文章主要介紹了Android錄屏功能的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Android調(diào)用外置攝像頭的方法

    Android調(diào)用外置攝像頭的方法

    這篇文章主要為大家詳細(xì)介紹了Android調(diào)用外置攝像頭的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論