一、首先添加远程依赖或者本地依赖MPAndroidChart的jar包),没有包的可联系我发你。
二、new一个 Empty Activity,名称取你喜欢的,我的示例中是叫“f_ym4”, xml页面代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/bc"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
三、编辑对应页面class的代码,源码来源于CSDN,但不全,我把完整能用的代码附上
package com.example.daohang;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
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.data.Entry;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.utils.ViewPortHandler;
import java.util.ArrayList;
import java.util.List;
public class F_ym4 extends Fragment {
private BarChart bc;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.f_ym4,null);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
bc = view.findViewById(R.id.bc);
setDesc(); //设置Title
setLegend();//设置图例
setXAxis();//设置X轴
setYAxis();//设置Y轴
loadData();//设置数据
}
//设置Title
private void setDesc() {
Description description = bc.getDescription();
// 获取屏幕中间x 轴的像素坐标
WindowManager wm=(WindowManager)getActivity().getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
float x = dm.widthPixels / 2;
description.setPosition(x,50);
description.setText("这是表格的标题");
description.setTextSize(16f);
description.setTextColor(Color.BLACK);
bc.setDescription(description);
}
//设置图例
private void setLegend() {
Legend legend = bc.getLegend();
legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
legend.setDrawInside(true);
legend.setTextSize(14f);
legend.setTypeface(Typeface.DEFAULT_BOLD);
legend.setXOffset(30);
legend.setOrientation(Legend.LegendOrientation.VERTICAL);
legend.setTypeface(Typeface.DEFAULT_BOLD);
}
//设置Y轴
private void setYAxis() {
bc.getAxisRight().setEnabled(false);
YAxis yAxis = bc.getAxisLeft();
yAxis.setTextSize(14f);
yAxis.setTextColor(Color.BLACK);
yAxis.setXOffset(15);
yAxis.setAxisMaximum(1200);
yAxis.setAxisMinimum(-1200);
yAxis.setGranularity(200f);
yAxis.setLabelCount(7);
}
//设置X轴
private void setXAxis() {
XAxis xAxis = bc.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setTextSize(16f);
xAxis.setTypeface(Typeface.DEFAULT_BOLD);
xAxis.setDrawGridLines(false);
xAxis.setLabelCount(5);
xAxis.setAxisMaximum(4.3f);
xAxis.setAxisMinimum(-0.3f);
xAxis.setGranularity(1f);
//自定义格式
xAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
int tep = (int) (2023 - value);
return tep + "年";
}
});
}
//设置数据
private void loadData() {
bc.setExtraOffsets(30,70,30,50);
bc.setTouchEnabled(false);
bc.animateXY(1000,1000);
final float d_1[] = {230f, -480f, 480f, 480f,170f};
final float d_2[] = { 120f,-600f, 400f, 200f,80f};
List<BarEntry> entries = new ArrayList<BarEntry>();
for(int i = 0; i < d_1.length; i++){
//使用BarEntry的构造方法的第三个参数来保存需要在柱块上显示的数据
entries.add(new BarEntry(i,new float[]{d_1[i],d_2[i]},(d_2[i] / (d_1[i] + d_2[i])) * 100));
}
BarDataSet barDataSet = new BarDataSet(entries,"");
barDataSet.setColors(Color.parseColor("#6D9C00"),Color.parseColor("#F07408"));
barDataSet.setStackLabels(new String[]{"无数据","有数据"});
barDataSet.setValueTextColor(Color.RED);
BarData barData = new BarData(barDataSet);
barData.setBarWidth(0.3f);
//自定义格式
barData.setValueFormatter(new ValueFormatter() {
private int isY = -1;//用于判断条件
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
isY ++;
if(isY %2 ==0){//无数据,则不显示文本
return "";
}else{//有数据,显示在entry中保存的数据
float res = (float) entry.getData();
return String.format("%.1f",res) + "%";
}
}
});
bc.setData(barData);
}
}
四、在主页面调用即可