android 自定义进程条

package com.nbhero.DIYview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import com.nbhero.flower.R;
import com.nbhero.util.tool;




/**
 * Created by zhenglingzhong on 2016/11/7.
 * 描述:实例化出一个对象然后直接调用set方法传入 运行时间 或者运行和租用总时长
 *
 */

public class ProView extends View {

    private   Context con;

    //view
    private   int left;
    private   int viewheight;
    private   int viewwidth;
    private   PorterDuffXfermode porterDuffXfermode;

    //point1
    private  Paint paintStart;
    private  int  startX;
    private  int  startY;
    private  int  startWidth;

    //line1
    private  Paint paintLineback;
    private  int lineBackStartX;
    private  int lineBackStartY;
    private  int lineBackEndX;
    private  int lineBackEndY;
    private  int lineBackWidth;

    //line2

    private  Paint paintLinePro;
    private  int lineProStartX;
    private  int lineProStartY;
    private  int lineProEndX;
    private  int lineProEndY;

    //point2

    private  Paint paintEnd;
    private  int  endX;
    private  int  endY;
    private  int  endWidth;

    //数据
    private  float pro = 1.0f;
    private  float linewidth;
    private  int move = 0;

    private  int stype = -1; //0为自运营 1为租用
    //运行时间
    private  int runtimeh = -1;
    private  int runtimem = -1;
    //租用时间
    private  int renttimeh = -1;
    private  int renttimem = -1;

    //文字
    private  Paint painttextTop;
    private  Paint painttextBottom;



    private int speed = 2;
    public ProView(Context context) {
        this(context,null);
    }

    public ProView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ProView(Context context, AttributeSet attrs, int defStyleAttr) {

        super(context, attrs, defStyleAttr);
        con = context;

    }


    public   void set(int runtime){

        stype = 0;

        runtimeh = runtime /60;
        runtimem = runtime % 60;
        pro = 1.0f;

    }

    public   void set(int runtime,int renttime){
        stype = 1;
        pro = runtime / renttime;


        runtimeh = runtime /60;
        runtimem = runtime % 60;
        renttimeh = renttime / 60;
        renttimem = renttime % 60;

        pro = (float) runtime /(float) renttime;

    }
    /**
     *传入速度int型 2 到10有效 范围外默认为2
     */
    public void setSpeed(int speed){

        if(2<speed && speed<10){

            this.speed = speed;
        }


    }

    //初始化画笔
    private  void init(){
        //view

        left = tool.dip2px(con,40);
        move =  left + startWidth * 2 ;
        porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
        //起始点
        paintStart = new Paint();
        paintStart.setColor(getResources().getColor(R.color.headcolor));
        paintStart.setStrokeWidth(tool.dip2px(con,14));
        startWidth =  tool.dip2px(con,10);
        startX = left + startWidth  ;
        startY = viewheight / 2;
        //背景线条
        paintLineback  = new Paint();
        paintLineback.setColor(getResources().getColor(R.color.textcolor));
        paintLineback.setStrokeWidth(tool.dip2px(con,2));
        lineBackStartX = left + startWidth * 2;
        lineBackStartY = startY;
        lineBackEndX = viewwidth - left - startWidth * 2;
        lineBackEndY =  startY;
        lineBackWidth =  lineBackEndX - lineBackStartX;
        //进度条
        paintLinePro = new Paint();
        paintLinePro.setColor(getResources().getColor(R.color.headcolor));
        paintLinePro.setStrokeWidth(tool.dip2px(con,3));
        lineProStartX = lineBackStartX;
        lineProStartY = startY;
        linewidth = pro * lineBackWidth;
        lineProEndX = (int)linewidth + left + startWidth * 2;
        lineProEndY = startY;
        //结束点
        paintEnd = new Paint();
        paintEnd.setColor(getResources().getColor(R.color.textcolor));
        endX = viewwidth -  startX;
        endY =  startY;
        endWidth = startWidth;

        //文字
        painttextTop = new Paint();
//        painttextTop.setStrokeWidth(tool.dip2px(con,16));
        painttextTop.setTextSize(tool.dip2px(con,16));
        painttextTop.setTextAlign(Paint.Align.CENTER);
        painttextTop.setColor(getResources().getColor(R.color.headcolor));
//文字下
        painttextBottom = new Paint();
//        painttextBottom.setStrokeWidth(tool.dip2px(con,16));
        painttextBottom.setTextSize(tool.dip2px(con,12));
        painttextBottom.setTextAlign(Paint.Align.CENTER);
        painttextBottom.setColor(getResources().getColor(R.color.headcolor));
        Log.e("zlz",lineProStartX+"lineProStartX");
        Log.e("zlz",lineBackWidth+"lineBackWidth");
        Log.e("zlz",lineBackEndX+"lineBackEndX");
        Log.e("zlz",lineProEndX+"lineProEndX");

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        viewheight = View.MeasureSpec.getSize(heightMeasureSpec);
        viewwidth = View.MeasureSpec.getSize(widthMeasureSpec);
        setMeasuredDimension(viewwidth, viewheight);
        init();
    }

    @Override
    protected void onDraw(Canvas canvas) {

        if(stype == 0){
            //自运营状态

            canvas.drawText(runtimeh+"h:"+runtimem+"m",endX ,endY - tool.dip2px(con,20),painttextTop);

            canvas.drawText("运行总时长",endX ,endY + tool.dip2px(con,30),painttextBottom);

        }else if(stype == 1){
            //租用状态


            canvas.drawText(runtimeh+"h:"+runtimem+"m",startX ,endY - tool.dip2px(con,20),painttextTop);

            canvas.drawText("运行总时长",startX ,endY + tool.dip2px(con,30),painttextBottom);

            canvas.drawText(renttimeh+"h:"+renttimem+"m",endX ,endY - tool.dip2px(con,20),painttextTop);

            canvas.drawText("租用总时长",endX ,endY + tool.dip2px(con,30),painttextBottom);
            //浮标
            canvas.drawLine(move,startY - startWidth,move,startY+startWidth,paintLinePro);
            canvas.drawText((int)(((float)(move - left - startWidth * 2)/ (float)lineBackWidth) * 100) + 1 + "%",move,endY + tool.dip2px(con,30),painttextBottom );

        }

        canvas.drawLine(lineBackStartX,lineBackStartY,lineBackEndX,lineBackEndY,paintLineback);
        canvas.drawCircle(startX,startY,startWidth,paintStart);
        canvas.drawCircle(endX,endY,endWidth,paintEnd);
        paintLinePro.setXfermode(porterDuffXfermode);
        canvas.drawLine(lineProStartX,lineProStartY,move,lineBackEndY,paintLinePro);




        if(move + speed < lineProEndX ) {

            move += speed;
            postInvalidate();

        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔爷不爱我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值