編輯:關於Android編程
主要是通過點擊按鈕,重新給進度條設值
主程序
package com.prosserbartext;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
private ProgressBar p1;
private TextView tv;
private Button btn;
private int flag = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
p1 = (ProgressBar) findViewById(R.id.progressBar1);
tv = (TextView) findViewById(R.id.textView1);
btn = (Button) findViewById(R.id.button1);
p1.setMax(100);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
p1.setProgress(flag);
MainActivity.this.tv.setText(flag + "%");
if(flag > 90){
flag = 100;
}else{
flag += 10;
}
}
});
}
}
給進度條設置背景色
layout文件a.b為兩個圖片,放在drawable中
在網上有看到一個自定義的,加到這裡跟大家分享。轉自:http://www.eoeandroid.com/thread-182511-1-1.html
一般的ProgressBar都只是一個光光的條(這裡說的都是水平進度條),雖然比不用進度條時給用戶的感覺要好,但是如果在形像化的東西上面再加上點文字,將進度描述量化,就可以讓用戶更加明白當前進度是多少了。 有了需求,就可以開始實現了。 這裡的原理就是繼承一個ProgressBar,然後重寫裡面的onDraw()方法。 不多說,直接上碼。(下面代碼中的 package hol.test; ,import就不寫了)public class MyProgress extends ProgressBar{
String text;
Paint mPaint;
public MyProgress(Context context) {
super(context);
// TODO Auto-generated constructor stub
System.out.println("1");
initText();
}
public MyProgress(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
System.out.println("2");
initText();
}
public MyProgress(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
System.out.println("3");
initText();
}
@Override
public synchronized void setProgress(int progress) {
// TODO Auto-generated method stub
setText(progress);
super.setProgress(progress);
}
@Override
protected synchronized void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
//this.setText();
Rect rect = new Rect();
this.mPaint.getTextBounds(this.text, 0, this.text.length(), rect);
int x = (getWidth() / 2) - rect.centerX();
int y = (getHeight() / 2) - rect.centerY();
canvas.drawText(this.text, x, y, this.mPaint);
}
//初始化,畫筆
private void initText(){
this.mPaint = new Paint();
this.mPaint.setColor(Color.WHITE);
}
private void setText(){
setText(this.getProgress());
}
//設置文字內容
private void setText(int progress){
int i = (progress * 100)/this.getMax();
this.text = String.valueOf(i) + "%";
}
}這樣寫後,可能會因為命名空間改變,下面屬性無法用代碼提示。一個簡單的做法就是,先寫一個正常的ProgressBar的標記,把屬性寫完後,再將ProgressBar替換為我們自定義的進度條的完整類名。 最後,使用方法就和普通的ProgressBar差不多了。
public class ProgressTest extends Activity {
private Button btn_go = null;
private MyProgress myProgress = null;
private Handler mHandler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
setParam();
addListener();
mHandler = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
// TODO Auto-generated method stub
myProgress.setProgress(msg.what);
return false;
}
});
}
private void findView(){
btn_go = (Button) findViewById(R.id.btn_go);
myProgress = (MyProgress) findViewById(R.id.pgsBar);
}
private void setParam(){
btn_go.setText("開始");
}
private void addListener(){
btn_go.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0;i <=50; i++){
mHandler.sendEmptyMessage(i * 2);
try {
Thread.sleep(80);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
});
}
}
PS:剛開始本以為進度條的構造方法只需要重寫那個最長參數的,也就是那個構造方法3,實際上我測試的時候基本都是運行的3方法。但有一次出錯了,最後才找到系統居然用的1方法,所以沒辦法,直接把三個構造方法全重寫了。如果有誰知道原因,麻煩告訴一下。進度條上的文字信息,不一定非要百分比,可以自由發揮。比如類似 “當前個數/總數”。
Android開發之MOB短信驗證SDK的使用(二)
我已經介紹了如何快速集成MOB短信驗證SDK,那今天我們講什麼呢?我們今天講一下如何不使用SDK中的GUI界面。對!我們今天來學習怎麼自定義GUI,說的直白點就是自定義界
榮耀7i手機截屏方法|華為榮耀7i如何截屏
手機截屏是一項非常常用的功能,聊天時很多時候都需要用截屏來輔助表達,但華為榮耀7i手機截屏功能和很多手機的截屏方式是不一樣的,華為榮耀7i怎麼截圖呢?下面安
A09_Spinner(下拉列表)自定義設置
Spinner控件是一個下拉列表 1.實現Spinner的系統默認設置 2.實現自定義設置: 3.使用的監聽器接口是:OnItemSelectedListener系統默認
2013年 移動App設計13項注意細節總結
導讀:在過去的一年裡,移動成主流也讓眾多的移動應用如雨後春筍般層出不窮,在眾多開發者從中獲利的同時競爭也愈演愈烈,如何才能保證自己立於不敗之地?用戶是上帝,一切還得從應用