Android 如何在水平条形图中显示右侧的标签和左侧的值?
使用3.0.2绘制水平条形图。这些值显示在条形图的右侧。我可以使用setValueFormatter和IaxiValueFormatter界面在右侧显示标签。但是现在不显示这些值Android 如何在水平条形图中显示右侧的标签和左侧的值?,android,charts,bar-chart,mpandroidchart,Android,Charts,Bar Chart,Mpandroidchart,使用3.0.2绘制水平条形图。这些值显示在条形图的右侧。我可以使用setValueFormatter和IaxiValueFormatter界面在右侧显示标签。但是现在不显示这些值 { HorizontalBarChart barChart = (HorizontalBarChart) itemView.findViewById(R.id.barChart); BarData data = new BarData(); ArrayList<
{
HorizontalBarChart barChart = (HorizontalBarChart) itemView.findViewById(R.id.barChart);
BarData data = new BarData();
ArrayList<BarEntry> valueSet1 = new ArrayList<>();
ArrayList<String> labels = new ArrayList<>();
labels.add("January");
labels.add("February");
labels.add("March");
labels.add("April");
labels.add("May");
labels.add("June");
ArrayList<String> ylabels = new ArrayList<>();
int dataCount=0;
for (int i=0;i<6;++i) {
BarEntry entry = new BarEntry(dataCount,(i+1)*2);
valueSet1.add(entry);
ylabels.add(" "+i);
dataCount++;
}
List<IBarDataSet> dataSets = new ArrayList<>();
BarDataSet bds = new BarDataSet(valueSet1, " ");
bds.setColors(ColorTemplate.MATERIAL_COLORS);
String[] xAxisLabels = labels.toArray(new String[0]);
String[] yAxisLabels = ylabels.toArray(new String[0]);
bds.setStackLabels(xAxisLabels);
dataSets.add(bds);
data.addDataSet(bds);
data.setDrawValues(true);
data.setBarWidth(0.4f);
XAxis xaxis = barChart.getXAxis();
xaxis.setDrawGridLines(false);
xaxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xaxis.setGranularityEnabled(true);
xaxis.setGranularity(1);
xaxis.setDrawLabels(true);
xaxis.setLabelCount(dataCount+1);
xaxis.setXOffset(10);
xaxis.setDrawAxisLine(false);
CategoryBarChartXaxisFormatter xaxisFormatter = new CategoryBarChartXaxisFormatter(xAxisLabels);
xaxis.setValueFormatter(xaxisFormatter);
YAxis yAxisLeft = barChart.getAxisLeft();
yAxisLeft.setEnabled(false);
YAxis yAxisRight = barChart.getAxisRight();
yAxisRight.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
yAxisRight.setDrawGridLines(false);
yAxisRight.setDrawAxisLine(false);
Legend legend = barChart.getLegend();
legend.setEnabled(false);
barChart.setFitBars(true);
barChart.setData(data);
barChart.setDescription(null);
}
public class CategoryBarChartXaxisFormatter implements IAxisValueFormatter {
private String[] mValues;
public CategoryBarChartXaxisFormatter(String[] values) {
this.mValues = values;
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
int val = (int)value;
String label="";
if(val>=0 && val<mValues.length) {
label= mValues[val];
}
else {
label= "";
}
return label;
}
}
{
HorizontalBarChart barChart=(HorizontalBarChart)itemView.findViewById(R.id.barChart);
BarData数据=新的BarData();
ArrayList valueSet1=新的ArrayList();
ArrayList标签=新的ArrayList();
标签。添加(“一月”);
标签。添加(“二月”);
标签。添加(“三月”);
标签。添加(“四月”);
标签。添加(“可能”);
标签。添加(“六月”);
ArrayList ylabels=新的ArrayList();
int dataCount=0;
对于(inti=0;i=0&&val我几天前实现了类似的东西
public class MainActivity extends AppCompatActivity {
protected HorizontalBarChart mChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> labels = new ArrayList<>();
labels.add("January");
labels.add("February");
labels.add("March");
labels.add("April");
labels.add("May");
labels.add("June");
mChart = (HorizontalBarChart) findViewById(R.id.barChart);
mChart.setDrawBarShadow(false);
mChart.setDrawValueAboveBar(true);
mChart.getDescription().setEnabled(false);
mChart.setPinchZoom(false);
mChart.setDrawGridBackground(false);
XAxis xl = mChart.getXAxis();
xl.setPosition(XAxis.XAxisPosition.BOTTOM);
xl.setDrawAxisLine(true);
xl.setDrawGridLines(false);
CategoryBarChartXaxisFormatter xaxisFormatter = new CategoryBarChartXaxisFormatter(labels);
xl.setValueFormatter(xaxisFormatter);
xl.setGranularity(1);
YAxis yl = mChart.getAxisLeft();
yl.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
yl.setDrawGridLines(false);
yl.setEnabled(false);
yl.setAxisMinimum(0f);
YAxis yr = mChart.getAxisRight();
yr.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
yr.setDrawGridLines(false);
yr.setAxisMinimum(0f);
ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
for (int i = 0; i < 6; i++) {
yVals1.add(new BarEntry(i, (i+1)*10));
}
BarDataSet set1;
set1 = new BarDataSet(yVals1, "DataSet 1");
ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
dataSets.add(set1);
BarData data = new BarData(dataSets);
data.setValueTextSize(10f);
data.setBarWidth(.9f);
mChart.setData(data);
mChart.getLegend().setEnabled(false);
}
public class CategoryBarChartXaxisFormatter implements IAxisValueFormatter {
ArrayList<String> mValues;
public CategoryBarChartXaxisFormatter(ArrayList<String> values) {
this.mValues = values;
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
int val = (int) value;
String label = "";
if (val >= 0 && val < mValues.size()) {
label = mValues.get(val);
} else {
label = "";
}
return label;
}
}
}
public类MainActivity扩展了AppCompatActivity{
保护水平条形图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList标签=新的ArrayList();
标签。添加(“一月”);
标签。添加(“二月”);
标签。添加(“三月”);
标签。添加(“四月”);
标签。添加(“可能”);
标签。添加(“六月”);
mChart=(水平条形图)findViewById(R.id.条形图);
mChart.settrabarshadow(假);
mChart.SetDrawValueUpperBar(真实);
mChart.getDescription().setEnabled(false);
mChart.setPinchZoom(假);
mChart.setDrawGridBackground(假);
XAxis xl=mChart.getXAxis();
xl.setPosition(XAxis.XAxisPosition.BOTTOM);
xl.setDrawAxisLine(真);
xl.setDrawGridLines(假);
CategoryBarChartXaxiFormatter XaxiFormatter=新CategoryBarChartXaxiFormatter(标签);
xl.setValueFormatter(XaxiFormatter);
xl.设定粒度(1);
YAxis yl=mChart.getAxisLeft();
yl.setPosition(YAxis.YAxisLabelPosition.INSIDE_图表);
yl.setDrawGridLines(假);
yl.setEnabled(false);
yl.最小值(0f);
YAxis yr=mChart.getAxisRight();
年设置位置(YAxis.YAxisLabelPosition.INSIDE_图表);
年设置图网格线(假);
年最小值(0f);
ArrayList yVals1=新的ArrayList();
对于(int i=0;i<6;i++){
yVals1.添加(新巴伦特里(i,(i+1)*10));
}
BarDataSet set1;
set1=新的数据集(yVals1,“数据集1”);
ArrayList数据集=新的ArrayList();
数据集.add(set1);
BarData数据=新的BarData(数据集);
data.setValueTextSize(10f);
数据。立根宽度(.9f);
mChart.setData(数据);
mChart.getLegend().setEnabled(false);
}
公共类CategoryBarChartXaxiFormatter实现IAxisValueFormatter{
ArrayList mValues;
公共CategoryBarChartXaxiFormatter(ArrayList值){
this.mValues=值;
}
@凌驾
公共字符串getFormattedValue(浮点值,AxisBase轴){
int val=(int)值;
字符串标签=”;
如果(val>=0&&val
结果
希望这能有所帮助。您不能同时在左侧和右侧都有值。还可以添加yr.setEnabled(false);yr.setDrawLabels(false);移除底部标签..因此我匹配了精确的requirement@amarok是否可以使用左重力创建月份标签?@AndrewS在画布上绘制时,必须创建自定义渲染器并将文本向左对齐。请检查此问题以获取提示