1. 程式人生 > >簡單死資料餅圖

簡單死資料餅圖

效果圖:

在這裡插入圖片描述

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>