欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发中自定义ProgressBar控件的方法示例

程序员文章站 2023-12-05 15:02:34
本文实例讲述了android开发中自定义progressbar控件的方法。分享给大家供大家参考,具体如下: 很简单,首先加载drawable,在onmeasure设置好其...

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《android窗口相关操作技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。