系统提供的环形进度条无法显示进度,且不会停止转动,所以要用到能显示进度的进度条时,只能自己定义一个控件。
创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都网站建设、恩施土家网络推广、微信小程序开发、恩施土家网络营销、恩施土家企业策划、恩施土家品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供恩施土家建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.comAPI 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许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款