大橙子网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

自定义控件——环形进度条-创新互联

系统提供的环形进度条无法显示进度,且不会停止转动,所以要用到能显示进度的进度条时,只能自己定义一个控件。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都网站建设、恩施土家网络推广、微信小程序开发、恩施土家网络营销、恩施土家企业策划、恩施土家品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供恩施土家建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com

  API Demos里面有提供类似的画法,API Demos --> Graphics --> Arcs。

  自定义控件——环形进度条

  若想做到如上图所示的最终效果,且×××进度的部分是通过动画渐渐生成的,则步骤如下:

  (1)首先新建一个类,继承View或者ProgressBar或者ImageView都可以,区别就在于若继承ProgressBar或者ImageView则我们自定义的控件也会具有这些父类的属性,比如继承ProgressBar时,运行就会发现除了我们画出来的控件之外,还能看到系统的无尽进度条。若想去除,则将onDraw()方法中的super.onDraw(canvas)删除即可。其实一般都是继承View即可。

  (2)创建画笔,若想画圆环,而不是实心圆,则画笔要设置成空心格式:

    mPaint.setStyle(Style.STROKE);再通过mPaint.setStrokeWidth(50)来设置画笔宽度。上图所示效果其实是由一个背景蓝色圆环和一个进度条×××圆弧构成,所以要创建两个画笔。

  (3)画出背景圆环:在onDraw()方法中写canvas.drawCircle(150, 150, 100, mPaint_bg);

  (4)画圆弧进度条:画圆弧的方法为canvas.drawArc(oval, -90, angle, false, mPaint);

第一个参数是一个椭圆,作为画圆弧的模板,第二个参数表示起始角度,第二个参数表示转动的总角度,第三个参数表示是否要画出圆内部分。所以要先创建一个椭圆对象:RectF oval = new RectF(50, 50, 250, 250);要想达到如上图所示效果,则椭圆要与背景圆完全重合,自己要计算好坐标。因为要实现动画生成进度的效果,所以第三个参数要设置为一个变量,实时变化。

  (5)写一个方法,可以外部调用,来设置进度条的进度:

    public void setProgress(int progress)

    {

      this.maxProgress = progress;

    }

  (6)设置动画效果:在构造方法中写:

  postDelayed(new Runnable() {

  @Override

     public void run() {

      totalAngle = 360*maxProgress/100;

      angle += 5;

      invalidate();

      if (angle <= totalAngle)

      {

        postDelayed(this, 80);

       }

     }

   }, 80);

  (7)在要用到该控件的类中,放入此控件,并得到控件对象,调用setProgress(int progress)方法即可完成。

备注:

  1、drawArc()方法的第四个参数若设置成true,则效果如下:

  自定义控件——环形进度条

  2、用Style.STROKE风格的画笔画圆弧时,圆弧并不是完全画在椭圆模板的外围,而是一半宽度处于椭圆内部,一半处于外围,同样的,画圆时也一样。将模板圆画出来就可以看到,实际情况如下图所示:

  自定义控件——环形进度条

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:自定义控件——环形进度条-创新互联
URL标题:http://dzwzjz.com/article/dejpjc.html
在线咨询
服务热线
服务热线:028-86922220
TOP