最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實現(xiàn)自定義圓形進度條

 更新時間:2016年03月29日 14:31:25   投稿:lijiao  
這篇文章主要介紹了Android自定義圓形進度條實現(xiàn)代碼,進度條在Android中教程經(jīng)常使用到,本文向大家分享了Android實現(xiàn)自定義圓形進度條的代碼,感興趣的小伙伴們可以參考一下

今天無意中發(fā)現(xiàn)一個圓形進度,想想自己實現(xiàn)一個,如下圖:

基本思路是這樣的:

1.首先繪制一個實心圓

2.繪制一個白色實心的正方形,遮住實心圓

3.在圓的中心動態(tài)繪制當前進度的百分比字符

4.繪制一個與之前實心圓相同顏色的空心圓

5.逐漸改變當前的百分比

6.根據(jù)百分比,逐漸改變正方形的大小,逐漸減小正方形的底部y軸的坐標,不斷重繪,直到達到100%

首先看看自定義的屬性

在values目錄下新建attrs.xml內(nèi)容如下:

定義繪制圓形的背景色,和繪制圓形的半徑大小

<?xml version="1.0" encoding="utf-8"?>
<resources>

  <attr name="circlecolor" format="color"></attr>
  <attr name="half" format="dimension"></attr>

  <declare-styleable name="myCircleImage">
    <attr name="circlecolor"></attr>
    <attr name="half"></attr>
  </declare-styleable>

</resources>


自定義視圖

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

public class CirclePro extends View {

 private Paint paint;
 private int circleBack;//圓的背景色
 private int mschedual = 0;//用于控制動態(tài)變化
 float circleHalf; //圓的半徑
 String percent = "";//繪制百分比的字符串

 @SuppressLint("Recycle")
 public CirclePro(Context context, AttributeSet attrs, int defStyleAttr) {
 super(context, attrs, defStyleAttr);
 paint = new Paint();
 TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.myCircleImage, defStyleAttr,0);
 @SuppressWarnings("unused")
 int leng = array.length();
 //獲取自定義的屬性,這里注意是R.styleable.myCircleImage_circlecolor而不是R.attr.circlecolor
 circleBack = array.getColor(R.styleable.myCircleImage_circlecolor,Color.GREEN);
 circleHalf = array.getDimension(R.styleable.myCircleImage_half,200.f);
 System.out.println(circleBack);

 }

 /**
 * 這個構(gòu)造參數(shù),當在布局文件中引用該view的時候,必須重寫該構(gòu)造函數(shù)
 * @param context
 * @param attrs
 */
 public CirclePro(Context context, AttributeSet attrs) {
 this(context, attrs, 0);//調(diào)用自己的構(gòu)造函數(shù)

 }

 /**
 * 根據(jù)文本的
 * @param text
 * @param textSize
 * @return
 */
 public float getTextWidth(String text,float textSize) {

 TextPaint textPaint = new TextPaint();
 textPaint.setTextSize(textSize);
 return textPaint.measureText(text);
 }

 @Override
 protected void onDraw(Canvas canvas) {
 // TODO Auto-generated method stub
 super.onDraw(canvas);

 float height = getHeight();
 float width = getWidth();
// float circleHalf = (float) (width*0.7/2);

 paint.setColor(circleBack);
 paint.setAntiAlias(true);
 paint.setStyle(Paint.Style.FILL);
 canvas.drawCircle(width/2,height/2,circleHalf, paint);//畫實心圓

 if (mschedual <= 100) {//,如果當前進度小于100,畫實心矩形
  paint.setColor(Color.WHITE);
  canvas.drawRect(width/2-circleHalf,height/2-circleHalf,width/2+circleHalf,height/2+circleHalf - mschedual*circleHalf/50, paint);
 }

 //畫當前進度的字符串
 paint.setColor(Color.BLACK);
 paint.setTextSize(30.f);
 percent = mschedual+" %";
 canvas.drawText(percent, width/2-getTextWidth(percent,30)/2,height/2+paint.getTextSize()*3/8, paint);//字體的高度=paint.getTextSize()*3/4

 //畫空心圓
 paint.setColor(circleBack);
 paint.setStyle(Paint.Style.STROKE);
 canvas.drawCircle(width/2,height/2,circleHalf, paint);

 if (mschedual < 100) {//更改當前進度值,并重繪
  mschedual++;
  invalidate();
 }
 }
}


在activity_main.xml中,需要用到自定義的屬性,首先添加命名空間: xmlns:liu=”http://schemas.android.com/apk/res/com.example.androidcirclepro”

其中l(wèi)iu是自定義的一個前綴,隨意命名的,com.example.androidcirclepro是我們的應用的包名

activity_main.xmln內(nèi)容如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  xmlns:liu="http://schemas.android.com/apk/res/com.example.androidcirclepro"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity" >

  <com.example.androidcirclepro.CirclePro
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    liu:half="90dp"
    liu:circlecolor="#fff0f0"
    />

</RelativeLayout>


至此一個自定義的圓形進度條就完成了,是不是很簡單。

相關文章

最新評論

乳山市| 交口县| 江安县| 小金县| 金寨县| 炉霍县| 家居| 莎车县| 平遥县| 宁远县| 大化| 正阳县| 道真| 平潭县| 汉中市| 梅州市| 迁西县| 建昌县| 开鲁县| 托克托县| 体育| 铜鼓县| 临安市| 延吉市| 永嘉县| 尚义县| 榕江县| 梓潼县| 进贤县| 靖安县| 磐安县| 山西省| 轮台县| 南安市| 阿克| 孝感市| 义乌市| 绥德县| 宝丰县| 上栗县| 临泽县|