編輯:關於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方法,所以沒辦法,直接把三個構造方法全重寫了。如果有誰知道原因,麻煩告訴一下。進度條上的文字信息,不一定非要百分比,可以自由發揮。比如類似 “當前個數/總數”。
我已經介紹了如何快速集成MOB短信驗證SDK,那今天我們講什麼呢?我們今天講一下如何不使用SDK中的GUI界面。對!我們今天來學習怎麼自定義GUI,說的直白點就是自定義界
手機截屏是一項非常常用的功能,聊天時很多時候都需要用截屏來輔助表達,但華為榮耀7i手機截屏功能和很多手機的截屏方式是不一樣的,華為榮耀7i怎麼截圖呢?下面安
Spinner控件是一個下拉列表 1.實現Spinner的系統默認設置 2.實現自定義設置: 3.使用的監聽器接口是:OnItemSelectedListener系統默認
導讀:在過去的一年裡,移動成主流也讓眾多的移動應用如雨後春筍般層出不窮,在眾多開發者從中獲利的同時競爭也愈演愈烈,如何才能保證自己立於不敗之地?用戶是上帝,一切還得從應用