Android studio利用MPAndroidChart制作简单柱形图

1.在项目的build.gradle的allprojects添加 maven { url “https://jitpack.io” }

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

2.在app的build.gradle添加依赖。

implementation 'com.github.PhilJay:MPAndroidChart:v3.0.0-beta1'

3.activity_main.xml布局页面。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
   android:gravity="center"
    android:layout_height="match_parent">
    <com.github.mikephil.charting.charts.BarChart
        android:id="@+id/bar_chart"
        android:layout_width="500dp"
        android:layout_height="300dp"
        />

</LinearLayout>

3.MainActivity.java部分。

package com.example.a86156.zhuxingtu;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
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.interfaces.datasets.IBarDataSet;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    BarChart barChart;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        barChart = findViewById(R.id.bar_chart);

        initBarChart1();

    }



    private void initBarChart1() {

        barChart.setDrawValueAboveBar(true);  //设置所有的数值在图形的上面,而不是图形上
        barChart.setTouchEnabled(false);  //进制触控
        barChart.setScaleEnabled(false); //设置能否缩放
        barChart.setPinchZoom(false);  //设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放
        barChart.setDrawBarShadow(false);  //设置阴影
        barChart.setDrawGridBackground(false);  //设置背景是否网格显示
        barChart.setDescription(""); //不描述

        //X轴的数据格式
        XAxis xAxis = barChart.getXAxis();
        xAxis.setValueFormatter(new MyFormatter());
        //设置位置
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //设置是否绘制网格线
        xAxis.setDrawGridLines(false);
        barChart.getAxisLeft().setDrawGridLines(false);
        // barChart.animateY(2500);
        //设置X轴文字剧中对齐
        xAxis.setCenterAxisLabels(false);
        //X轴最小间距
        xAxis.setGranularity(1f);


        //Y轴的数据格式
        YAxis axisLeft = barChart.getAxisLeft();
        axisLeft.setValueFormatter(new MyFormatter2());
        barChart.animateY(2500);
        //设置Y轴刻度的最大值
        axisLeft.setAxisMinValue(0);
        axisLeft.setAxisMaxValue(100);
        barChart.getAxisRight().setEnabled(false);

        //设置数据
        setData01();

    }

    //日对比的数据
    private void setData01() {
        ArrayList<BarEntry> yVals1 = new ArrayList<>();
            yVals1.add(new BarEntry(1, 36));
            yVals1.add(new BarEntry(2, 85));
            yVals1.add(new BarEntry(3, 20));
            yVals1.add(new BarEntry(4, 66));
            yVals1.add(new BarEntry(5, 32));
            yVals1.add(new BarEntry(6, 25));
            yVals1.add(new BarEntry(7, 56));

        BarDataSet set1;
        set1 = new BarDataSet(yVals1, "");
        //设置多彩 也可以单一颜色
        set1.setColor(Color.parseColor("#4169E1"));
        set1.setDrawValues(false);
        ArrayList<IBarDataSet> dataSets = new ArrayList<>();
        dataSets.add(set1);
        BarData data = new BarData(dataSets);
        barChart.setData(data);
        barChart.setFitBars(true);
        //设置文字的大小
        set1.setValueTextSize(12f);
        //设置每条柱子的宽度
        data.setBarWidth(0.7f);
        barChart.invalidate();

        for (IDataSet set : barChart.getData().getDataSets())
            set.setDrawValues(!set.isDrawValuesEnabled());
        barChart.invalidate();
        barChart.setAutoScaleMinMaxEnabled(!barChart.isAutoScaleMinMaxEnabled());
        barChart.notifyDataSetChanged();
        barChart.invalidate();

    }


}

3.如果要改变x轴下面的数据描述格式,则需要再定义一个类MyFormatter并实现AxisValueFormatter这个接口。

package com.example.a86156.zhuxingtu;

import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.formatter.AxisValueFormatter;

import java.text.DecimalFormat;

public class MyFormatter implements AxisValueFormatter {

    private DecimalFormat mFormat;
    String[] strings;

    public MyFormatter() {
        //格式化数字
        mFormat = new DecimalFormat("###,###,##0.0");
    }

    public MyFormatter(String[] strings) {
        this.strings = strings;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        if (value == 1) {
            return "周一";
        }
        if (value == 2) {
            return "周二";
        }
        if (value == 3) {
            return "周三";
        }
        if (value == 4) {
            return "周四";
        }
        if (value == 5) {
            return "周五";
        }
        if (value == 6) {
            return "周六";
        }
        if (value == 7) {
            return "周日";
        }
        return "";
    }

    @Override
    public int getDecimalDigits() {
        return 0;
    }
}

4.如果要改变y轴左侧的数据描述格式,则需要再定义一个类MyFormatter2并实现AxisValueFormatter这个接口。

package com.example.a86156.zhuxingtu;

import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.formatter.AxisValueFormatter;

import java.text.DecimalFormat;

public class MyFormatter2  implements AxisValueFormatter {
    private DecimalFormat mFormat;
    public MyFormatter2() {
        //格式化数字
        mFormat = new DecimalFormat("###,###,##0.0");
    }
    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return mFormat.format(value) + " %";
    }

    @Override
    public int getDecimalDigits() {
        return 0;
    }

}

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值