android 自定义进度条
2018-04-08 10:35
127 查看
package com.xiaoma.ad.pigai.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;public class ProgressView extends View {public ProgressView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);initView(context);}public ProgressView(Context context, AttributeSet attrs) {super(context, attrs);initView(context);}public ProgressView(Context context) {super(context);initView(context);}/** 进度条最大值 */private float maxCount;/** 进度条当前值 */private float currentCount;/** 画笔 */private Paint mPaint;private int mWidth, mHeight;/** * 进度条斜线的宽度 */private int GRAYWIDTH = 5;private void initView(Context context) {setMaxCount(100);setCurrentCount(60);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mPaint = new Paint();mPaint.setAntiAlias(true);int round = mHeight * 9 / 10;System.out.println("max=" + maxCount + " current=" + currentCount);mPaint.setColor(Color.rgb(255, 200, 47));// 设置画笔的颜色RectF rectBg = new RectF(0, 0, mWidth, mHeight);canvas.drawRoundRect(rectBg, round, round, mPaint);// 画出圆角矩形背景mPaint.setColor(Color.rgb(244, 244, 244));int myWidth = 5;RectF rectBlackBg = new RectF(myWidth, myWidth, mWidth - myWidth,mHeight - myWidth);canvas.drawRoundRect(rectBlackBg, round * 7 / 9, round * 7 / 9, mPaint);// 画出浅白色背景float section = currentCount / maxCount;RectF rectProgressBg = new RectF(myWidth, myWidth, (mWidth - myWidth)* section, mHeight - myWidth);mPaint.setColor(Color.rgb(226, 29, 0));canvas.drawRoundRect(rectProgressBg, round * 7 / 9, round * 7 / 9,mPaint);RectF rectProgressBg2 = new RectF(myWidth, myWidth, (mWidth - myWidth)* section, mHeight - myWidth);mPaint.setColor(Color.rgb(187, 25, 0));// mPaint.setColor(Color.BLACK);float myX = rectProgressBg2.left + myWidth;int length = (int) (((mWidth - myWidth) * section - myWidth) / (mHeight- myWidth * 2 - 2));if (length > 1) {for (int i = 0; i < length - 1; i++) {Path path = new Path();path.moveTo(myX + i * (mHeight - (mHeight - myWidth * 2 - 2))- 2, rectProgressBg2.bottom);path.lineTo(myX + GRAYWIDTH + i* (mHeight - (mHeight - myWidth * 2 - 2)) - 2,rectProgressBg2.bottom);path.lineTo(myX + GRAYWIDTH + (i + 1)* (mHeight - (mHeight - myWidth * 2 - 2)) - 2,rectProgressBg2.top);path.lineTo(myX + (i + 1)* (mHeight - (mHeight - myWidth * 2 - 2)) - 2,rectProgressBg2.top);path.close();if ((myX + GRAYWIDTH + (i + 1)* (mHeight - (mHeight - myWidth * 2 - 2)) - 2) > ((mWidth - myWidth)* section - myWidth)) {break;}canvas.drawPath(path, mPaint);}}}/** * dip转换为px * * @param dip * @return */private int dipToPx(int dip) {float scale = getContext().getResources().getDisplayMetrics().density;return (int) (dip * scale + 0.5f * (dip >= 0 ? 1 : -1));}/*** * 设置最大的进度值 * * @param maxCount */public void setMaxCount(float maxCount) {this.maxCount = maxCount;}/*** * 设置当前的进度值 * * @param currentCount */public void setCurrentCount(float currentCount) {this.currentCount = currentCount > maxCount ? maxCount : currentCount;invalidate();}public float getMaxCount() {return maxCount;}public float getCurrentCount() {return currentCount;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);if (widthSpecMode == MeasureSpec.EXACTLY|| widthSpecMode == MeasureSpec.AT_MOST) {mWidth = widthSpecSize;} else {mWidth = dipToPx(100);}if (heightSpecMode == MeasureSpec.AT_MOST|| heightSpecMode == MeasureSpec.UNSPECIFIED) {mHeight = dipToPx(15);} else {mHeight = heightSpecSize;}setMeasuredDimension(mWidth, mHeight);// 设置控件的宽高}} xml文件中直接使用就可以看到效果
xml文件中直接使用就可以看到效果
相关文章推荐
- Android自定义漂亮的圆形进度条
- android progressBar 自定义 进度颜色
- android 自定义view实现进度条加载效果
- android113 自定义进度条
- 【Android 应用开发】 自定义 圆形进度条 组件
- android 带百分比的自定义进度条
- Android自定义View之仿京东售后审核进度
- Android自定义进度条
- android文件下载及自定义通知显示下载进度
- Android自定义进度条
- Android自定义View——菊花进度条
- Android 自定义View修炼-自定义加载进度动画XCLoadingImageView
- Android自定义进度条
- android自定义圆形进度+自定义属性
- Android自定义答题进度条
- android 进阶之路-自定义view-水波纹进度球
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- Android 自定义旋转进度框(单帧)
- android 自定义控件(四)自定义进度条
- Android自定义圆形渐变进度条(续)--加动画