Android Studio 中用MPAndroidChart 绘制柱状图

一、首先添加远程依赖或者本地依赖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);

    }
}

四、在主页面调用即可

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在Android Studio中使用MPAndroidChart绘制柱状图的步骤: 1.在项目的build.gradle文件中添加以下依赖项: ```gradle dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3' } ``` 2.在布局文件中添加一个BarChart视图: ```xml <com.github.mikephil.charting.charts.BarChart android:id="@+id/bar_chart" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3.在Java代码中获取BarChart对象并设置数据: ```java // 获取BarChart对象 BarChart barChart = findViewById(R.id.bar_chart); // 创建一个BarDataSet对象,用于存储柱状图的数据 BarDataSet dataSet = new BarDataSet(entries, "Label"); // 创建一个BarData对象,用于存储BarDataSet对象 BarData barData = new BarData(dataSet); // 设置BarChart的数据 barChart.setData(barData); ``` 4.设置柱状图的样式和属性: ```java // 设置柱状图的颜色 dataSet.setColor(Color.BLUE); // 设置柱状图的宽度 dataSet.setBarWidth(0.9f); // 设置柱状图的值是否显示在柱子上方 dataSet.setValueTextSize(10f); dataSet.setValueTextColor(Color.BLACK); // 设置X轴和Y轴的属性 XAxis xAxis = barChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setDrawGridLines(false); YAxis yAxis = barChart.getAxisLeft(); yAxis.setDrawGridLines(false); yAxis.setAxisMinimum(0f); // 设置柱状图的动画效果 barChart.animateY(1000); ``` 5.最后,记得在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值