国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android開發(fā)中自定義ProgressBar控件的方法示例

2019-12-12 01:52:32
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Android開發(fā)中自定義ProgressBar控件的方法。分享給大家供大家參考,具體如下:

很簡(jiǎn)單,首先加載Drawable,在onMeasure設(shè)置好其區(qū)域大小,

然后使用canvas.clipRect繪圖

public class ProgressView extends ImageView {  private Drawable maskDraw;  /**   * 加載的進(jìn)度 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);    // 保存當(dāng)前畫筆的狀態(tài)    canvas.save();    int topline = (int) (getHeight() - getHeight() * getProcess() / 100);    /*     * canvas 剪切出一個(gè)區(qū)域,使在這個(gè)區(qū)域里面的內(nèi)容是有效的,區(qū)域之外是無效的。     */    canvas.clipRect(0, topline, getWidth(), getHeight());    maskDraw.draw(canvas);    // 恢復(fù)到之前保存的狀態(tài)    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;  }  /**   * 設(shè)置新的進(jìn)度以后,自動(dòng)刷新   */  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;      }    }  };}

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android窗口相關(guān)操作技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 江川县| 石城县| 河源市| 崇义县| 淮安市| 湘阴县| 塔城市| 延寿县| 金坛市| 夏邑县| 乐都县| 孟州市| 宁城县| 固始县| 彰化市| 临澧县| 琼结县| 库尔勒市| 永济市| 象山县| 北川| 林周县| 抚州市| 巴中市| 香格里拉县| 鲜城| 东丽区| 安吉县| 长兴县| 吉木乃县| 营山县| 芜湖市| 鲁山县| 额敏县| 溧阳市| 仁怀市| 赤城县| 三明市| 韩城市| 中山市| 华宁县|