好久没写博客本来是定好每周写一篇的。丫的,就是因为身边没个妹子,都没人提醒我。程序员的悲哀啊。求
运行效果图
老大赐我个妹子啊。不求多好。但求36D啊。
好了 送上代码,以备。
首先送上圆形的进度条,用来作下载。
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mDefaultPaint = new Paint(); mProgressPaint = new Paint(); //拿到控件的宽度 int centerWidth = getWidth()/2; //边距2 mDefaultPaint.setStrokeWidth(2); int radius = centerWidth-1; mDefaultPaint.setAntiAlias(true); mDefaultPaint.setColor(Color.BLACK); mDefaultPaint.setStyle(Paint.Style.STROKE); mProgressPaint.setStrokeWidth(3); mProgressPaint.setAntiAlias(true); mProgressPaint.setColor(Color.GREEN); mProgressPaint.setStyle(Paint.Style.STROKE); String text = "下载进度:"+loadingProgress+"%"; Rect rect = new Rect(); Paint textPaint = new Paint(); textPaint.setTextSize(20f); textPaint.setStyle(Paint.Style.FILL); textPaint.setAntiAlias(true); textPaint.setColor(Color.RED); textPaint.setTypeface(Typeface.DEFAULT_BOLD); //拿到文本的宽高 textPaint.getTextBounds(text, 0, text.length(), rect); //绘制默认情况的圆形 canvas.drawCircle(centerWidth,centerWidth,radius,mDefaultPaint); //绘制文本 canvas.drawText(text, centerWidth - rect.right / 2, centerWidth - rect.top / 2, textPaint); RectF rectF = new RectF(centerWidth-radius,centerWidth-radius,centerWidth+radius,centerWidth+radius); //当达到100的时候弹出下载完成 if(loadingProgress==100){ canvas.drawArc(rectF,0,360.0f*loadingProgress/100,false,mProgressPaint); Toast.makeText(getContext(),"下载完成",Toast.LENGTH_SHORT).show(); return ; }else{ //未下载完成的时候根据进度绘制弧形 canvas.drawArc(rectF,0,360.0f*loadingProgress/100,false,mProgressPaint); } }
接着送上全部代码.
package com.huangdi.myprogress.widget; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Typeface; import android.util.AttributeSet; import android.view.View; import android.widget.Toast; /** * Created by huangdi on 15/10/11. * 自定义的进度条,圆形,带颜色的 * */ public class ColorProgress extends View { private Paint mDefaultPaint; private Paint mProgressPaint; public int getLoadingProgress() { return loadingProgress; } public void setLoadingProgress(int loadingProgress) { this.loadingProgress = loadingProgress; postInvalidate(); } private boolean isLoading; private int loadingProgress; public ColorProgress(Context context) { this(context,null); } public ColorProgress(Context context, AttributeSet attrs) { this(context, attrs,0); } public ColorProgress(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mDefaultPaint = new Paint(); mProgressPaint = new Paint(); //拿到控件的宽度 int centerWidth = getWidth()/2; //边距2 mDefaultPaint.setStrokeWidth(2); int radius = centerWidth-1; mDefaultPaint.setAntiAlias(true); mDefaultPaint.setColor(Color.BLACK); mDefaultPaint.setStyle(Paint.Style.STROKE); mProgressPaint.setStrokeWidth(3); mProgressPaint.setAntiAlias(true); mProgressPaint.setColor(Color.GREEN); mProgressPaint.setStyle(Paint.Style.STROKE); String text = "下载进度:"+loadingProgress+"%"; Rect rect = new Rect(); Paint textPaint = new Paint(); textPaint.setTextSize(20f); textPaint.setStyle(Paint.Style.FILL); textPaint.setAntiAlias(true); textPaint.setColor(Color.RED); textPaint.setTypeface(Typeface.DEFAULT_BOLD); //拿到文本的宽高 textPaint.getTextBounds(text, 0, text.length(), rect); //绘制默认情况的圆形 canvas.drawCircle(centerWidth,centerWidth,radius,mDefaultPaint); //绘制文本 canvas.drawText(text, centerWidth - rect.right / 2, centerWidth - rect.top / 2, textPaint); RectF rectF = new RectF(centerWidth-radius,centerWidth-radius,centerWidth+radius,centerWidth+radius); //当达到100的时候弹出下载完成 if(loadingProgress==100){ canvas.drawArc(rectF,0,360.0f*loadingProgress/100,false,mProgressPaint); Toast.makeText(getContext(),"下载完成",Toast.LENGTH_SHORT).show(); return ; }else{ //未下载完成的时候根据进度绘制弧形 canvas.drawArc(rectF,0,360.0f*loadingProgress/100,false,mProgressPaint); } } }
同理在送上水平进度条
package com.huangdi.myprogress.widget; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; import android.util.AttributeSet; import android.view.View; /** * Created by huangdi on 15/10/11. */ public class HoriZontal extends View { private Paint mtextPaint,mDefaultPaint,mProgressPaint; private int progress; public void setProgress(int progress) { this.progress = progress; postInvalidate(); } public HoriZontal(Context context) { this(context, null); } public HoriZontal(Context context, AttributeSet attrs) { this(context, attrs, 0); } public HoriZontal(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mDefaultPaint = new Paint(); mDefaultPaint.setColor(Color.GRAY); mDefaultPaint.setAntiAlias(true); mDefaultPaint.setStrokeWidth(10); mDefaultPaint.setStyle(Paint.Style.FILL); mProgressPaint = new Paint(); mProgressPaint.setColor(Color.RED); mProgressPaint.setAntiAlias(true); mProgressPaint.setStrokeWidth(12); mProgressPaint.setStyle(Paint.Style.FILL); mtextPaint = new Paint(); mtextPaint.setColor(Color.GREEN); mtextPaint.setAntiAlias(true); mtextPaint.setTextSize(20f); mtextPaint.setStyle(Paint.Style.STROKE); mtextPaint.setTypeface(Typeface.DEFAULT_BOLD); mtextPaint.setStyle(Paint.Style.STROKE); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //首先得画出默认的进度条 int centerWidth = getWidth(); int height = getHeight(); canvas.drawLine(getPaddingLeft(), height , getPaddingLeft() + centerWidth, height , mDefaultPaint); Rect rect = new Rect(); String text = "屌丝下载进度为:"+progress+"%"; mtextPaint.getTextBounds(text, 0, text.length(), rect); canvas.drawText(text, getPaddingLeft(),height+rect.top,mtextPaint); canvas.drawLine(getPaddingLeft(),height ,(progress*(getPaddingLeft()+centerWidth))/100,height,mProgressPaint); } }
运行效果图
好啦 以上就是这次简易自定义progress