费县租房网,西安市中考录取查询,渲组词
本文实例为大家分享了android自定义view实现圆环进度条的具体代码,供大家参考,具体内容如下
效果展示
动画效果
view实现
1.底层圆环是灰色背景
2.上层圆环是红色背景
3.使用动画画一条弧线
view
/** * 圆环进度条 */ public class roundprogressbar extends view { //绘制矩形区域 private rectf rectf; //起始角度 private float startangle; //扫过角度 private float sweepangle; //画笔 private paint paint; //默认控件大小 private int defoutsize; //默认线条宽度 private int defoutline; private int strokewidth; private pointf pointf = new pointf(); public roundprogressbar(context context) { super(context); initdata(); } public roundprogressbar(context context, attributeset attrs) { super(context, attrs); initdata(); } /** * 参数初始化 */ private void initdata() { startangle = 0; sweepangle = 0; defoutsize = 400; defoutline = 20; strokewidth = 20; rectf = new rectf(); //抗锯齿画笔 paint = new paint(paint.anti_alias_flag); paint.setcolor(color.gray); paint.setstrokewidth(defoutline); //笔帽样式 paint.setstrokecap(paint.cap.round); paint.setstyle(paint.style.stroke); } /** * xml -----> 提供可绘制位置 * * @param widthmeasurespec 宽 * @param heightmeasurespec 高 */ @override protected void onmeasure(int widthmeasurespec, int heightmeasurespec) { super.onmeasure(widthmeasurespec, heightmeasurespec); setmeasureddimension(defoutsize, defoutsize); } /** * 当大小时改变回调 * * @param w * @param h * @param oldw * @param oldh */ @override protected void onsizechanged(int w, int h, int oldw, int oldh) { super.onsizechanged(w, h, oldw, oldh); pointf.x = w >> 1; pointf.y = h >> 1; rectf.top = strokewidth >> 1; rectf.bottom = h - (strokewidth >> 1); rectf.left = strokewidth >> 1; rectf.right = w - (strokewidth >> 1); } /** * 绘制 * * @param canvas */ @override protected void ondraw(canvas canvas) { super.ondraw(canvas); //画布旋转 paint.setcolor(color.gray); canvas.rotate(135, pointf.x, pointf.y); //绘制圆环 canvas.drawarc(rectf, startangle, 270, false, paint); paint.setcolor(color.red); canvas.drawarc(rectf, startangle, sweepangle, false, paint); } public void setprogress(float index) { //防止数值越界 if (index > 1 || index < 0) { return; } valueanimator valueanimator = valueanimator.offloat(0, index); valueanimator.setduration(3000); valueanimator.setinterpolator(new decelerateinterpolator()); valueanimator.addupdatelistener(new valueanimator.animatorupdatelistener() { @override public void onanimationupdate(valueanimator animation) { sweepangle = (float) animation.getanimatedvalue() * 270; //重写绘制 invalidate(); } }); valueanimator.start(); } }
最后在activity中使用setprogress方法赋值进度条的进度来实现效果
progressview.setprogress(0.8f);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论