本文實例講述了Android開發中自定義ProgressBar控件的方法。分享給大家供大家參考,具體如下:
很簡單,首先加載Drawable,在onMeasure設置好其區域大小,
然后使用canvas.clipRect繪圖
public class ProgressView extends ImageView { private Drawable maskDraw; /** * 加載的進度 0-100 */ private int mProcess = 20; public ProgressView(Context context, AttributeSet attrs) { super(context, attrs); maskDraw = context.getResources().getDrawable(R.drawable.red_bg); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 保存當前畫筆的狀態 canvas.save(); int topline = (int) (getHeight() - getHeight() * getProcess() / 100); /* * canvas 剪切出一個區域,使在這個區域里面的內容是有效的,區域之外是無效的。 */ canvas.clipRect(0, topline, getWidth(), getHeight()); maskDraw.draw(canvas); // 恢復到之前保存的狀態 canvas.restore(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); maskDraw.setBounds(0, 0, getWidth(), getHeight()); } public float getProcess() { return mProcess; } /** * 設置新的進度以后,自動刷新 */ public void setProgress(int mProcess) { if (mProcess > 100) { this.mProcess = 100; } if (mProcess < 0) { this.mProcess = 0; } this.mProcess = mProcess; invalidate(); }}使用方法
public class ProgressActivity extends Activity { private ProgressView piv; private int pivDeep = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_progressview); piv = (ProgressView) findViewById(R.id.my_pro_iv); handler.sendEmptyMessage(2); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: piv.setProgress(pivDeep); break; case 2: new Thread() { public void run() { while (true) { pivDeep = (pivDeep + 5) % 100; handler.sendEmptyMessage(1); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } }; }.start(); break; default: break; } } };}希望本文所述對大家Android程序設計有所幫助。
新聞熱點
疑難解答