自定义view柱形图

public class HistogramView extends View {
    private Paint mLinePaint;
    private Paint mGreenPaint;
    private Paint mTextPaint;

    private Context mContext;

    private float weight;
    private float height;
    private float mScale;
    private String[] y_title = {"100", "80", "60", "40", "20", "0"};
    private List<Long> mData;
    private List<String> mNames;

    public HistogramView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        mLinePaint = new Paint();
        mGreenPaint = new Paint();
        mTextPaint = new Paint();

        mLinePaint.setARGB(255, 223, 233, 231);
        mGreenPaint.setARGB(255, 0, 200, 149);
        mTextPaint.setARGB(255, 153, 153, 153);

        mGreenPaint.setStyle(Paint.Style.FILL);

        mTextPaint.setAntiAlias(true);
        mGreenPaint.setAntiAlias(true);
        mLinePaint.setAntiAlias(true);
        mScale = context.getResources().getDisplayMetrics().density;

        mData = new ArrayList<>();
        mNames = new ArrayList<>();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        weight = 0.7F * w;
        height = 0.70F * h;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        float min_height = height / 5;
        for (int i = 5; i >= 0; i--) {
            if (i == 5) {
                mLinePaint.setARGB(255, 131, 148, 144);
            } else {
                mLinePaint.setARGB(255, 223, 233, 231);
            }
            canvas.drawLine(70 * mScale, 30 * mScale + min_height * i, 70 * mScale + weight, 30 * mScale + min_height * i, mLinePaint);
            mTextPaint.setTextAlign(Paint.Align.RIGHT);
            mTextPaint.setTextSize(10 * mScale);
            canvas.drawText(y_title[i], 60 * mScale, 32 * mScale + min_height * i, mTextPaint);
        }
        float min_weight = (weight - 70 * mScale) / (mData.size());
        mTextPaint.setTextSize(12 * mScale);
        mTextPaint.setTextAlign(Paint.Align.CENTER);
        for (int i = 0; i < mData.size(); i++) {
            int leftR = (int) (70 * mScale + i * min_weight + min_weight / 2);
            int rightR = leftR + (int) (min_weight / 2);
            int buttomR = (int) (30 * mScale + min_height * 5);
            int topR = buttomR - (int) (height / 100 * mData.get(i));
            canvas.drawRect(new RectF(leftR, topR, rightR, buttomR), mGreenPaint);
            mTextPaint.setARGB(255, 153, 153, 153);
            canvas.drawText(mNames.get(i), leftR + min_weight / 4, buttomR + 20 * mScale, mTextPaint);
            mTextPaint.setARGB(255, 51, 51, 51);
            canvas.drawText(mData.get(i) + "", leftR + min_weight / 4, topR - 10 * mScale, mTextPaint);
        }
    }

    public void updateThisData(List<Long> data, List<String> name) {
        mData = data;
        mNames = name;
        invalidate();
    }
}


布局
    <com.bawei.myapplication.HistogramView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/HistogramView"
        />


mianvitiy

        mData = new ArrayList<>();
        mNames = new ArrayList<>();

        mData.add((long) 80);
        mData.add((long) 40);

        mData.add((long) 60);
        mData.add((long) 30);
        mData.add((long) 50);


        mNames.add("刘群峰");
        mNames.add("房情情");
        mNames.add("张立云");
        mNames.add("张立云");
        mNames.add("张立云");

        HistogramView histogramView = findViewById(R.id.HistogramView);

        histogramView.updateThisData(mData,mNames);

猜你喜欢

转载自blog.csdn.net/qq_41946491/article/details/82284273
今日推荐