mpAndroidChart 柱状图一览(中文斜体,横向柱状图,叠层柱状图,固定宽度左右滑动)

本文介绍了如何使用mpAndroidChart库创建三种不同类型的柱状图:普通柱状图(固定宽度,左右滑动,中文斜体标签),横向柱状图(无网格,带阴影),以及叠层柱状图(无网格,X轴显示中文)。内容包括自定义View,MarkerView的实现,以及XML布局文件的设计。适用于版本3.0.3,无需修改源码即可实现中文斜体标签。
摘要由CSDN通过智能技术生成

效果图:

 

 

先上自定义view,因为要把所有的方法写在activity里 实在是太麻烦了,其实就是一个工具类。

第一个 普通柱状图

要求是固定宽度左右滑动,没有网格,长文字斜展示


public class MBarChart extends BarChart {

    BChartMarkerView markerView;

    public MBarChart(Context context) {
        super(context);
    }

    public MBarChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MBarChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

    private void initSetting() {
        /*xy轴设置*/
        //x轴设置显示位置在底部
        mXAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        mXAxis.setGranularity(1f);
        //mXAxis.setCenterAxisLabels(true);
        mXAxis.setLabelCount(7);
        mXAxis.setTextSize(8f);
        //文字倾斜展示
        mXAxis.setLabelRotationAngle(-60);
        //保证y轴从0开始 不然会上移一点
        mAxisLeft.setAxisMinimum(0f);
        mAxisRight.setAxisMinimum(0f);
        mAxisRight.enableGridDashedLine(10f,10f,10f);
        //不显示X轴 Y轴线条
        mXAxis.setDrawAxisLine(true);
        mXAxis.setDrawGridLines(false);
        mXAxis.setGridColor(Color.TRANSPARENT);

        //mAxisLeft.setDrawAxisLine(false);
        mAxisRight.setDrawAxisLine(false);
        mAxisLeft.setDrawGridLines(false);
        mAxisRight.setDrawGridLines(false);
        //不显示左侧Y轴
        mAxisRight.setEnabled(false);
        /*折现图例 标签 设置*/
        mLegend.setForm(Legend.LegendForm.LINE);
        mLegend.setTextSize(0f);
        //显示位置
        mLegend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        mLegend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        /*是否绘制在表里*/
        mLegend.setDrawInside(false);
        //不显示右下角描述内容
        mDescription.setEnabled(false);
        setDescription(mDescription);

    }

    public void setBarDataSet( int color, int size, final List<BarEntry> list,String[] v) {
        BarDataSet barDataSet=new BarDataSet(list,"");
        barDataSet.setColor(color);
        barDataSet.setFormLineWidth(0f);
        barDataSet.setFormSize(0f);
        barDataSet.setDrawValues(false);
        BarData barData=new BarData(barDataSet);
        barData.setValueTextSize(10f);

        ValueFormatter xAxisFormatter = new DayAxisValueFormatter(v,DayAxisValueFormatter.DAY);
        mXAxis.setValueFormatter(xAxisFormatter);

        if (size<10){
            barData.setBarWidth((float) size/10f);
            setData(barData);
        }else {
            setData(barData);
            setChartData(size);
        }
        setChartEffect();
        initSetting();
    }

    /*设置图表效果*/
    private void setChartEffect(){
        //不可以手动缩放
        setScaleXEnabled(false);
        setScaleYEnabled(false);
        setScaleEnabled(false);

        //背景颜色
        setBackgroundColor(Color.WHITE);
        //不显示图表网格
        setDrawGridBackground(false);
        setDrawBorders(false);
        //背景阴影
        setDrawBarShadow(false);
        setHighlightFullBarEnabled(false);
        //显示柱图底层阴影
        setDrawBarShadow(false);
        //设置动画效果
        animateY(1000,Easing.EasingOption.Linear);
        animateX(1000,Easing.EasingOption.Linear);
    }



    /* marker */
    public void setMarkerView(Context context) {
        markerView=new BChartMarkerView(context);
        setMarker(markerView);
    }

    /*固定宽*/
    private void setChartData(int size){
        Matrix m = new Matrix();
        m.postScale(scaleNum(size), 1f);//两个参数分别是x,y轴的缩放比例。例如:将x轴的数据放大为之前的1.5倍
        getViewPortHandler().refresh(m, this, false);//将图表动画显示之前进行缩放
    }
    //30个横坐标时,缩放4f是正好的。
    private float scalePercent = 3f/30f;

    private float scaleNum(int xCount){
        return xCount * scalePercent;
    }

}

第二个  横向柱状图

要求是没有网格 有阴影

package com.example.lmy.cardkt.chart;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Matrix;
import android.util.AttributeSet;

import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.HorizontalBarChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值