“MPAndroidChart - 重叠条形图和 X 轴标签无法正确显示,还需要动态设置 Y 轴最大值”

问题描述 投票:0回答:1

我在 Android 应用程序中使用 MPAndroidChart 来显示从 API 获取的条形图。但是,我面临几个问题:

重叠条: 我的条形图中的条形重叠,我想确保它们间隔适当。

X 轴标签未正确显示: 代表月份和年份的 X 轴标签未正确显示。它不显示实际标签,而是显示数值(0.0、1.0、2.0...)。

动态设置Y轴最大值: 我想根据从 API 收到的最大值动态设置 Y 轴上的最大值。 这是我现有代码的简化版本:

// ... (existing imports)

public class MainActivity extends AppCompatActivity {
    private BarChart barChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        barChart = findViewById(R.id.barChart);

        new FetchDataTask().execute("http://sms1.ilmwasooli.com/dashboard/getcollechistorytest");
    }

    private void updateUI(String data) {
        try {
            // Parse JSON data
            JSONObject jsonResponse = new JSONObject(data);
            String status = jsonResponse.getString("status");

            if (status.equals("success")) {
                JSONArray dataArray = jsonResponse.getJSONArray("Data");

                // Extract values for the bar chart
                ArrayList<BarEntry> entriesReceived = new ArrayList<>();
                ArrayList<BarEntry> entriesBalance = new ArrayList<>();
                ArrayList<String> labels = new ArrayList<>();
                float maxAmount = 0f;

                for (int i = 0; i < dataArray.length(); i++) {
                    JSONObject monthData = dataArray.getJSONObject(i);
                    String monthYear = monthData.getString("mnth") + " " + monthData.getString("year");

                    float receivedValue = (float) monthData.getDouble("rcvd");
                    float balanceValue = (float) monthData.getDouble("bal");

                    maxAmount = Math.max(maxAmount, Math.max(receivedValue, balanceValue));

                    entriesReceived.add(new BarEntry(i, receivedValue));
                    entriesBalance.add(new BarEntry(i, balanceValue));
                    labels.add(monthYear);
                }

                BarDataSet dataSetReceived = new BarDataSet(entriesReceived, "Received Amount");
                dataSetReceived.setColor(getResources().getColor(R.color.primary_color_light));

                BarDataSet dataSetBalance = new BarDataSet(entriesBalance, "Balance Amount");
                dataSetBalance.setColor(getResources().getColor(R.color.primary_color_dark));

                BarData barData = new BarData(dataSetReceived, dataSetBalance);

                barChart.setData(barData);

                XAxis xAxis = barChart.getXAxis();
                xAxis.setValueFormatter(new MyXAxisValueFormatter(labels));
                xAxis.setLabelRotationAngle(45f);

                YAxis yAxis = barChart.getAxisLeft();
                yAxis.setAxisMaximum(maxAmount);

                barChart.invalidate();
            } else {
                Toast.makeText(MainActivity.this, "Failed to fetch data", Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    // ... (existing classes and methods)
}

I am getting this output : I want something like this two bars and x-axis values as

java android httpurlconnection mpchart
1个回答
0
投票

这个可能对你第二个问题有帮助。

这个可能对你第三个问题有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.