Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android progressBar小結(可改變背景色)

android progressBar小結(可改變背景色)

編輯:關於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;
				}
			}
		});

	}

}
給進度條設置背景色




    
    
    
    


a.b為兩個圖片,放在drawable中
layout文件



    

    

    


在網上有看到一個自定義的,加到這裡跟大家分享。轉自: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) + "%";
}
 
 
}


 這樣一個可以滿足我們基本需求的進度條就寫好了。  用的時候就可以直接在layout的XML裡面加了,不過添加的寫法稍微有點不同。標記名要寫成這個自定義進度條的完整類名,就像下面這樣。
這樣寫後,可能會因為命名空間改變,下面屬性無法用代碼提示。一個簡單的做法就是,先寫一個正常的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方法,所以沒辦法,直接把三個構造方法全重寫了。如果有誰知道原因,麻煩告訴一下。進度條上的文字信息,不一定非要百分比,可以自由發揮。比如類似 “當前個數/總數”。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved