当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发中自定义ProgressBar控件的方法示例

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

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网