您的位置:首页 > 移动开发 > Android开发

重写View(一)弧线进度条

2016-04-16 16:36 507 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android