自定义View之-ProgressBar进度条

     好久没写博客本来是定好每周写一篇的。丫的,就是因为身边没个妹子,都没人提醒我。程序员的悲哀啊。求

    老大赐我个妹子啊。不求多好。但求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

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值