效果图:
CustomPiechartView继承View
package com.example.piechart.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
public class CustomPiechartView extends View {
/**
* 记录传入的角度
* @param context
*/
float[] mAngles;
/**
* 位置控制
* @param context
*/
RectF mRectF;
/**
* 画笔
* @param context
*/
Paint mPaint;
/**
* 起始角度
* @param context
*/
float mStartAngles=0;
public CustomPiechartView(Context context) {
super(context);
init();
}
public CustomPiechartView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
/**
* 设置每个扇形的角度
* @param angles 角度数组
*/
public void setData(float[] angles){
mAngles=angles;
}
private void init() {
//初始化画笔
mPaint=new Paint();
//设置画笔颜色为蓝色
mPaint.setColor(Color.BLUE);
//设置宽度
mPaint.setStrokeWidth(20);
//设置填充模式
mPaint.setStyle(Paint.Style.FILL);
//设置上下左右位置
mRectF=new RectF();
mRectF.top=100;
mRectF.bottom=400;
mRectF.right=550;
mRectF.left=150;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (int i=0;i<mAngles.length;i++){
if (i%2==0){
mPaint.setColor(Color.BLACK);
}else {
mPaint.setColor(Color.YELLOW);
}
//画扇形
//第一个参数,位置信息
//第二个参数,起始角度
//第三个参数,从起始角度开始,顺时针旋转角度
//第四个参数,是否延申到圆心
//第五个参数,画笔
canvas.drawArc(mRectF,mStartAngles,mAngles[i],true,mPaint);
//下一个扇形的起始角度 = 本次扇形起始角度 + 本次扇形旋转角度
mStartAngles += mAngles[i];
}
}
}
MainActivity
package com.example.piechart;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.example.piechart.view.CustomPiechartView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
float[] angles = new float[]{80, 60, 100, 50, 30, 40};
CustomPiechartView customBingView = findViewById(R.id.piechart);
customBingView.setData(angles);
customBingView.invalidate();
}
}
布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.example.piechart.view.CustomPiechartView
android:id="@+id/piechart"
android:layout_width="wrap_content"
android:layout_height="300dp"
/>
</android.support.constraint.ConstraintLayout>