最近開發寫了兩個簡單的進度條控制項,分享一下

2021-08-08 04:17:32 字數 4122 閱讀 8835

先看看效果圖

原始碼在下面,自取

public

class

batterycontinueview

extends

view

public

batterycontinueview(context context, attributeset attrs)

public

batterycontinueview(context context, attributeset attrs, int defstyleattr)

@suppresslint("drawallocation")

@override

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec) , null, shader.tilemode.repeat);

//新建乙個線性漸變,前兩個引數是漸變開始的點座標,第三四個引數是漸變結束的點的座標

// 連線這2個點就拉出一條漸變線了,

// 玩過ps的都懂。然後那個陣列是漸變的顏色。下乙個引數是漸變顏色的分布,

// 如果為空,每個顏色就是均勻分布的。最後是模式,這裡設定的是迴圈漸變

progresspaint.setshader(mshader);

mseconderedus = mradus - dp2px(10);

//畫內部圓弧

innerrectf = new rectf(getpaddingleft() + bgarcwidth / 2 + dp2px(10), getpaddingtop() + bgarcwidth / 2 + dp2px(10),

getmeasuredwidth() - bgarcwidth / 2 - dp2px(10), getmeasuredheight() - bgarcwidth / 2 - dp2px(10));

}/**

* 測量大小

*/private

intstartmeasure(int whspec) else

return result;

}private

void

initpaint()

//畫外邊緣線的畫筆

private paint linepaint;

/*** 實現畫刻度線的功能

*/private

void

drawline(final canvas canvas)

// 恢復畫布狀態。

canvas.restore();

}@override

protected

void

ondraw(canvas canvas)

private

int mpotinterraduis;

private path path;

/*** 繪製指標

*/private

void

drawpointer(canvas canvas)

private

int mmin = 0; // 最小值

/** * 通過數值得到角度位置

*/private

float

getanglefromresult(float result)

/*** 依圓心座標,半徑,扇形角度,計算出扇形終射線與圓弧交叉點的xy座標

*/public

float getcoordinatepoint(int radius, float angle) else

if (angle == 90) else

if (angle > 90 && angle < 180) else

if (angle == 180) else

if (angle > 180 && angle < 270) else

if (angle == 270) else

return point;

}/**

* 設定當前值

**@param currentvalues

*/public

void

setcurrentvalues(int currentvalues)

if (currentvalues < 0)

setanimator(currentvalues);

}valueanimator valueanimator;

private

int animatorduration;

private

void

setanimator(final

int percent)

});valueanimator.addlistener(new animatorlisteneradapter()

});valueanimator.start();

}/**

* dip 轉換成px

**@param dip

*@return

*/private

intdiptopx(float dip)

}

public

class

colorarcprogressbar

extends

view

public

colorarcprogressbar(context context, attributeset attrs)

public

colorarcprogressbar(context context, attributeset attrs, int defstyleattr)

@suppresslint("drawallocation")

@override

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec) , null, shader.tilemode.repeat);

//新建乙個線性漸變,前兩個引數是漸變開始的點座標,第三四個引數是漸變結束的點的座標

// 連線這2個點就拉出一條漸變線了,

// 玩過ps的都懂。然後那個陣列是漸變的顏色。下乙個引數是漸變顏色的分布,

// 如果為空,每個顏色就是均勻分布的。最後是模式,這裡設定的是迴圈漸變

progresspaint.setshader(mshader);

}/**

* 測量大小

*/private

intstartmeasure(int whspec) else

return result;

}private

void

initpaint()

@override

protected

void

ondraw(canvas canvas)

/*** 設定當前值

**@param currentvalues

*/public

void

setcurrentvalues(int currentvalues)

if (currentvalues < 0)

setanimator(currentvalues);

}valueanimator valueanimator;

private

int animatorduration;

private

void

setanimator(final

int percent)

});valueanimator.addlistener(new animatorlisteneradapter()

});valueanimator.start();

}/**

* dip 轉換成px

**@param dip

*@return

*/private

intdiptopx(float dip)

}

實現乙個簡單的進度條

1 首先我們用固定在左右兩邊,中間預留空間,然後用 進行填充在這裡我們用 表示1 通過增加字元 來保證進度的增加。printf 100s r str 格式化輸出。表示左對齊 100表示列寬,r 表示回車,即每 次列印完使游標回到行首在這裡需要解釋一下 r 和 n 這兩個概念 回車 r 表示回到當前行...

Android乙個簡單易用的進度條

進行網路載入,為了使用者體驗,常常要用到進度條,我就找到乙個很方便的用法 private static final int messagetype 01 0x0001 private progressdialog progressdialog null 以下的方法是 private void pro...

Python 乙個簡單的進度條的實現

import math defprocess bar total work,work index,length times total work length 長度倍數,用來縮放或擴充套件至所需要的長度。例如總量為15或155都可以按照長度為20來輸出 percentage work index 1...