重写View(一)弧线进度条

demo效果图
这里写图片描述
代码

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by Administrator on 2016/4/16.
 */
public class CustomView1 extends View{

    int measureWidth;
    int measureHeight;
    //圆形属性
    float circle;//直径
    float radius;//半径
    Paint circlrPaint;
    //圆环属性
    RectF rectF;//矩形
    float sweepAngle;//
    float sweepValue;//比例值(0~100模拟进度条)
    Paint arcPaint;

    String text;//文本
    float textSize;//文字大小

    Paint textPaint;
    public CustomView1(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        measureWidth = MeasureSpec.getSize(widthMeasureSpec);
        measureHeight = MeasureSpec.getSize(heightMeasureSpec);
        setMeasuredDimension(measureWidth,measureHeight);
        initView();
    }

    private void initView() {
        float length = 0;
        if (measureHeight>=measureWidth){
            length = measureWidth;
        }else {
            length = measureHeight;
        }
        //中间圆形的属性
        circle = length/2;
        radius = length/4;
        //外接矩形属性
        rectF = new RectF((float) (0.1*length),(float) (0.1*length),
                (float) (0.9*length),(float) (0.9*length));
        circlrPaint = new Paint();
        circlrPaint.setAntiAlias(true);//设置平滑,抗锯齿功能(就是图像边缘相对清晰一点,锯齿痕迹不那么明显)
        circlrPaint.setColor(getResources().getColor(R.color.colorAccent));

        sweepAngle = (sweepValue/100f)*360f;
        arcPaint = new Paint();
        arcPaint.setStyle(Paint.Style.STROKE);//设置style
        arcPaint.setStrokeWidth((float) (length*0.1));//圆环宽度
        arcPaint.setAntiAlias(true);
        arcPaint.setColor(getResources().getColor(R.color.colorAccent));
        textPaint = new Paint();
        textPaint.setColor(Color.BLACK);
        textPaint.setTextSize(textSize);
        textPaint.setTextAlign(Paint.Align.CENTER);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawCircle(circle,circle,radius,circlrPaint);

        canvas.drawArc(rectF,270,sweepAngle,false,arcPaint);

        canvas.drawText(text,0,text.length(),circle,
                circle+(textSize/4),textPaint);
    }

    public void setSweepValue(float sweepValue){
        if (sweepValue!=0){
            this.sweepValue = sweepValue;
        }else {
            this.sweepValue = 25;
        }
        this.invalidate();
    }

    public void setText(String text) {
        this.text = text;
        this.invalidate();
    }

    public void setTextSize(float textSize) {
        this.textSize = textSize;
        this.invalidate();
    }
}

MainActivity调用

public class MainActivity extends AppCompatActivity {

    CustomView1 customView1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        customView1 = (CustomView1) findViewById(R.id.customView1);
        customView1.setText("50%");
        customView1.setTextSize(30);
        customView1.setSweepValue(50);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值