編輯:關於Android編程
上一篇學習了基本用法,今天學一下稍微復雜一點的,先看一下效果圖
為了完成上面的效果還是要用到上一期開頭的四步<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGJyPgo8L3A+CjxwPjGjrMr00NTTprjD0qrT0NHVyaujrNKq09DL2bbIPC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">
2, 在構造方法中獲得這些屬性
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.ViewCircle, defStyle, 0);
int n = a.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = a.getIndex(i);
switch (attr) {
case R.styleable.ViewCircle_speed:
mSpeed = a.getInteger(attr, 300);
break;
case R.styleable.ViewCircle_circleColor:
mColor = a.getColor(attr, Color.GREEN);
break;
}
}
a.recycle();
4,重寫onDraw
protected void onDraw(Canvas canvas) {
// 居中
canvas.translate(getWidth() / 2, getHeight() / 2);
// 畫出三個圓
canvas.drawCircle(0, 0, 200, mCircle);
canvas.drawCircle(0, 0, 180, mCentreCircle);
canvas.drawCircle(0, 0, 160, mNexCircle);
//進度
RectF rectF = new RectF(-180, -180, 180, 180);
canvas.drawArc(rectF, -90, mProgress, true, mTimer);
//算出字體所占大小,使其居中
mLinePaint.getTextBounds(String.valueOf(mProgress), 0,
String.valueOf(mProgress).length(), rect);
canvas.drawText(String.valueOf(mProgress), -rect.width() / 2, 0,
mLinePaint);
//總進度為六十
int count = 60;
//刻度從190--200
int y = 190;
Rect rect = new Rect();
mLinePaint.getTextBounds("00", 0, "00".length(), rect);
//當i%10==0時畫一道刻度線
for (int i = 0; i < count; i++) {
if (i % 10 == 0) {
canvas.drawLine(0, y, 0, 200, mLinePaint);
canvas.drawText(String.valueOf(i / 10) + "0",
-rect.width() / 2, 220, mLinePaint);
}
canvas.rotate(360 / count, 0, 0);
}
}我們注意一下canvas.drawArc(rectF, -90, mProgress, true, mTimer);
我們傳進去的為true效果就是

如果我們傳進去false

可以明顯的看到差別,沒事也可以試試我們這個demo傳進去false會是什麼效果。
接下來為了讓這個進度動起來我們就要用到線程來刷新ui
new Thread() {
public void run() {
while (true) {
mProgress++;
if (mProgress == 360) {
mProgress = 0;
}
postInvalidate();
try {
Thread.sleep(mSpeed);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}.start();
源碼
android開發步步為營之34:四大組件之ContentProvider
ContentProvider,從字面意義上理解,內容提供者,這個類目的就是一個橋梁的作用,讓一個應用的數據(SQLiteDatabase, SharedPreferen
Android開發中單例模式寫法與可能遇到的坑
年底了,手上的活不是很多,就想著將平時記錄的筆記總結一下。准備總結一下平時常常使用的設計模式。本篇就是比較常用的單例(Singleton)模式。不管是Android開發還
Android中屏蔽"電源鍵長按"、"Home鍵"、"Home鍵長按"
Android中屏蔽電源鍵長按、Home鍵、Home鍵長按 這幾個“按鈕”的觸發,都會產生一個Action == Intent.ACTION_CLOSE_SYSTE
Android中使用socket通信實現消息推送的方法詳解
原理最近用socket寫了一個消息推送的demo,在這裡和大家分享一下。主要實現了:一台手機向另外一台手機發送消息,這兩台手機可以隨時自由發送文本消息進行通信,類似我們常