Android 自定义进度条
来源:互联网 发布:mac开机进度条卡住 编辑:程序博客网 时间:2024/05/19 12:26
github:https://github.com/HarryXR/android
- 水平进度条
测量
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int textHeight = ViewUtils.getTextHeight(mAlertTextPaint); int height = 0; if (!TextUtils.isEmpty(mLeftAlert) || !TextUtils.isEmpty(mRightAlert)) { height += textHeight; //加上文字高度 } height += LINE_MARGIN; height += STROKE_WIDTH * 2; height += LINE_MARGIN; if (!TextUtils.isEmpty(mLeftContent) || !TextUtils.isEmpty(mRightContent)) { height += textHeight; } setMeasuredDimension(widthMeasureSpec, height);}
ViewUtils测量文本高度
public static int getTextHeight(Paint paint) { Paint.FontMetrics fontMetrics = paint.getFontMetrics(); return (int) Math.ceil(fontMetrics.descent - fontMetrics.ascent);}
画进度
private void drawProgress(Canvas canvas) { //画灰色进度 Paint bgPaint = getProgressPaint(); bgPaint.setColor(mProgressBg); //左右扣除半个圆距离 canvas.drawLine(STROKE_WIDTH / 2, mHeight / 2, mWidth - STROKE_WIDTH / 2, mHeight / 2, bgPaint); //画绿色进度 Paint progressPaint = getProgressPaint(); progressPaint.setColor(mProgressColor); int stopX = (int) ((mWidth - STROKE_WIDTH) * mProgress); canvas.drawLine(STROKE_WIDTH / 2, mHeight / 2, stopX, mHeight / 2, progressPaint); //画指示 Paint textPaint = getIndicatorPaint(); int textWidth = ViewUtils.getTextWidth(textPaint, mAlert); Paint indicatorPaint = getProgressPaint(); indicatorPaint.setColor(mIndicatorBg); indicatorPaint.setStrokeWidth(ALERT_STROKE_WIDTH); canvas.drawLine(stopX - textWidth / 2, mHeight / 2, stopX + textWidth / 2, mHeight / 2, indicatorPaint); //画指示文字 Paint.FontMetrics fm = textPaint.getFontMetrics(); int alertY = mHeight / 2 + (int) (Math.abs(fm.bottom + fm.top)) / 2; canvas.drawText(mAlert, stopX - textWidth / 2, alertY, textPaint);}
- 圆环
大家看源码吧,涉及到一些数学公式的计算,原理类似
0 0
- Android自定义进度条
- Android自定义进度条
- Android自定义进度条
- Android自定义进度条
- android 自定义进度条颜色
- Android自定义进度条颜色
- Android 自定义进度条
- android 自定义进度条
- android 自定义圆形进度条
- android自定义进度条
- Android自定义进度条
- Android自定义进度条颜色
- Android 自定义进度条
- android 自定义进度条
- Android之自定义进度条
- Android自定义进度条
- Android自定义进度条
- Android实现自定义进度条
- linux网络编程之TCP/IP基础(三):IP数据报格式和IP地址路由
- Clojure介绍、安装和语法
- linux网络编程之TCP/IP基础(四):TCP连接的建立和断开、滑动窗口
- 划分无冲突子集问题
- 【分享】10个帮你修图+剪辑视频+PPT制作的网站
- Android 自定义进度条
- linux网络编程之TCP/IP基础(五):分析一帧基于UDP的TFTP协议帧
- 模式九:模板方法模式(Template Pattern)——封装算法块
- Window进程管理
- MySQL InnoDB四个事务级别 与 脏读、不重复读、幻读
- 弹性盒子常用属性
- java中类与类之间的关系
- 【软件开发】Visual Studio“15”预览版 5
- 均值,方差,协方差,协方差矩阵,特征值,特征向量