如何从mpandroidchart的水平条形图中移除填充?

13

我正在尝试制作一个水平条形图,使其覆盖整个父布局,但未成功。以下是我的代码 -

HorizontalBarChart barchart = new HorizontalBarChart(activity);
barchart.setLayoutParams(new LinearLayout.LayoutParams(0, 110, weight));

ArrayList<BarEntry> entries = new ArrayList<BarEntry>();
entries.add(new BarEntry(86.0f, 0));

BarDataSet dataset = new BarDataSet(entries, "");
dataset.setColor(Color.parseColor("#E0E0E0"));

ArrayList<String> labels = new ArrayList<String>();
labels.add("86.0"); 

BarData bardata = new BarData(labels, dataset);
barchart.setData(bardata);
barchart.setDescription("");

Legend legend = barchart.getLegend();
legend.setEnabled(false);

YAxis topAxis = barchart.getAxisLeft();
topAxis.setDrawLabels(false);

YAxis bottomAxis = barchart.getAxisRight();
bottomAxis.setDrawLabels(false);

XAxis rightAxis = barchart.getXAxis();
rightAxis.setDrawLabels(false);
bottomAxis.setDrawLabels(false);

barchart.setPadding(-1, -1, -1, -1);
barchart.setBackgroundColor(Color.CYAN);

return barchart;

我希望我的水平条形图(barchart)可以填满整个蓝色区域。请有人帮忙。

编辑: @PhilippJahoda 我尝试了你的解决方法,但一开始它显示的方式与之前相同,只有当我点击/触摸图表时它才会覆盖整个区域。你能告诉我为什么我必须触摸图表才能使它填充整个空间吗?

初次启动时它看起来像这样 -

屏幕截图:输入图片说明

点击后它看起来像这样 -

屏幕截图2:输入图片说明

5个回答

27

如果您还没有更新到最新版本的库,请先进行更新。 然后只需从图表中移除所有偏移量。这在文档中有说明。

调用:

chart.setViewPortOffsets(0f, 0f, 0f, 0f);

2
这是我遇到的同样问题。我在设置图表数据之后调用chart.setViewPortOffset(100f, 0f, 100f, 0f),但我的编辑只有在我点击图表后才会生效。有解决方法吗@PhilippJahoda?我使用的是最新的mpchart库版本。 - andrea.rinaldi
1
饼图没有setViewPortOffsets方法。 - SANAT
@SANAT 尝试使用负值的 setExtraOffsets。 - Daivid
由于某些原因,setViewPortOffsets(0f, 0f, 0f, 0f) 在API<24中无法正常工作。 - nnyerges
setViewPortOffsets(0f, 0f, 0f, 0f) 只有在所有值都为零时才能正常工作。如果您尝试像 setViewPortOffsets(0f, 0f, 0f, 10f) 这样的操作,它只有在与图表进行交互后才能生效。即使您调用 invalidate() 方法也无济于事。 - Slobodan Antonijević

12

去除内边距的功能与

chart.setViewPortOffsets(0f, 0f, 0f, 0f);

但如果效果仅在触摸后出现,请尝试在设置数据后通过以下方式使图表视图无效:

post(new Runnable() {
    @Override
    public void run() {
        chartView.invalidate();
    }
});

5
    YAxis yl = chart.getAxisLeft();
    yl.setSpaceTop(20f);

3

我认为控制内边距的最佳方法如下:

  1. 将所有偏移量设置为0

    chart.setViewPortOffsets(0f, 0f, 0f, 0f);

  2. 从XML文件中控制内边距

    com.github.mikephil.charting.charts.LineChart android:id="@+id/chart" android:layout_width="match_parent" android:layout_height="500dp" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:layout_marginBottom="10dp"


0

当您首次设置ViePortOffsets并随后移动视图时,它可以工作。

Graph.setViewPortOffsets(0F,0F,0F,0F)
Graph.moveViewTo(0f,0f,YAxis.AxisDependency.RIGHT)
Graph.invalidate()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接