上个月,我开发了一个应用程序,使用api mpandroid图表生成图形。
在最后一种情况下,我在包含字符串值列表的数组中的bardata上插入值,并转换为float(需要param)。
但是,在最后一个过程中,图形只显示整数值,比如“22”而不是“22.0”,代码是在2 java.class上开发的,apontamentoindicadoresgrafico2是发生错误的项目类;组合活动是不存在错误的类。
apontamentoindicadoresgrafic2.class类
public class ApontamentoIndicadorGrafico3Activity extends AppCompatActivity {
private Context context;
private String codugb = "";
private String codind = "";
private final ArrayList<String> valoresData = new ArrayList<>();
private final ArrayList<String> valoresReal = new ArrayList<>();
private final ArrayList<String> valoresMeta = new ArrayList<>();
private final ArrayList<String> valoresCapMax = new ArrayList<>();
private ArrayList<String> parametrosEscalaGrafico = new ArrayList<>();
private CombinedChart ln_grafico;
private ApontamentoIndicadorGraficoDao apontamentoIndicadorGraficoDao;
private IndicadoresDao indicadoresDao;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_apontamento_indicador_grafico);
inicializarVariaveis();
inicializarAcoes();
}
private void inicializarVariaveis() {
context = ApontamentoIndicadorGrafico3Activity.this;
ln_grafico = findViewById(R.id.ln_grafico);
apontamentoIndicadorGraficoDao = new ApontamentoIndicadorGraficoDao(context);
indicadoresDao = new IndicadoresDao(context);
codugb = getIntent().getStringExtra(IndicadoresDao.CODUGB);
codind = getIntent().getStringExtra(IndicadoresDao.CODIND);
ln_grafico = findViewById(R.id.ln_grafico);
ajustarGrafico(ln_grafico);
ajustarLegenda(ln_grafico);
}
private void inicializarAcoes() {
ajustarTela(context);
ArrayList<HMAux> retornoGrafico = apontamentoIndicadorGraficoDao.obterListaApontamentoIndicadorGrafico();
if (retornoGrafico.size() > 0) {
for (int i = 0; i < retornoGrafico.size(); i++) {
HMAux item = retornoGrafico.get(i);
String data = item.get(ApontamentoIndicadorGraficoDao.DATA);
String meta = item.get(ApontamentoIndicadorGraficoDao.META);
String real = item.get(ApontamentoIndicadorGraficoDao.REAL);
String capmax = item.get(ApontamentoIndicadorGraficoDao.CAPMAX);
valoresData.add(data.substring(0, 8));
//valoresData.add(data);
valoresMeta.add(meta);
valoresReal.add(real);
valoresCapMax.add(capmax);
}//endLoopRetorno
parametrosEscalaGrafico = new ArrayList<String>();
String[] parts = valoresData.toString().split(",");
for (String part : parts) {
String[] empdata = part.split(":");
String strId = empdata[0].trim();
if (strId.contains("[")) {
strId = strId.replace("[", "");
} else {//strId.contains("]"))
if (strId.contains("]")) {
strId = strId.replace("]", "");
}
}
parametrosEscalaGrafico.add(strId);
}
ajustarDimensoes(ln_grafico, parametrosEscalaGrafico);
CombinedData data = new CombinedData();
data.setData(inserirColunasGrafico(valoresReal, valoresMeta));
data.setData(inserirLinhasGrafico(valoresCapMax, valoresMeta));
ajustarGrafico(data, ln_grafico);
ln_grafico.setData(data);
ln_grafico.invalidate();
} else {
ToolBox.exibirMessagem(context, "Apontamento Indicador Gráfico", "Não foi possível exibir o gráfico", 0);
ln_grafico.setNoDataText("Não foi possível exibir o gráfico");
}
}
private BarData inserirColunasGrafico(ArrayList<String> valoresReal, ArrayList<String> valoresMeta) {
ArrayList<BarEntry> listaValoresAcima = new ArrayList<>();
ArrayList<BarEntry> listaValoresAbaixo = new ArrayList<>();
//Float itemReal;
//Float itemMeta;
if (String.valueOf(valoresReal.size()).equals(String.valueOf(valoresMeta.size()))) {
int index = 0;
for (int position = 0; position < valoresReal.size(); position++) {
float itemReal = Float.parseFloat(valoresReal.get(position));
float itemMeta = Float.parseFloat(valoresMeta.get(position));
if (itemReal >= itemMeta) {
//listaValoresAcima.add(new BarEntry(index + 0.5f, itemReal));
listaValoresAcima.add(new BarEntry(index + 0.5f, itemReal));
listaValoresAbaixo.add(new BarEntry(index + 0.5f, 0));
} else {
// listaValoresAbaixo.add(new BarEntry(index + 0.5f, itemReal));
listaValoresAbaixo.add(new BarEntry(index + 0.5f, itemReal));
listaValoresAcima.add(new BarEntry(index + 0.5f, 0));
}
index = index + 1;
}
}
//REAL
BarDataSet barDataAcima = new BarDataSet(listaValoresAcima, "Acima");//Acima
barDataAcima.setStackLabels(new String[]{"Stack 1"});
//COLUNAS
barDataAcima.setColor(Color.rgb(0, 0, 255));//Azul
//TEXTO
barDataAcima.setValueTextColor(Color.rgb(0, 0, 255));
barDataAcima.setValueTextSize(10f);
//barDataAcima.setAxisDependency(YAxis.AxisDependency.LEFT);
//META
BarDataSet barDataAbaixo = new BarDataSet(listaValoresAbaixo, "Abaixo");//Abaixo / Verm.
barDataAbaixo.setStackLabels(new String[]{"Stack 1"});
//COLUNAS
barDataAbaixo.setColor(Color.rgb(255, 0, 0));//Vermelho
//TEXTO
barDataAbaixo.setValueTextColor(Color.rgb(255, 0, 0));//Vermelho
barDataAbaixo.setValueTextSize(10f);
barDataAbaixo.setAxisDependency(YAxis.AxisDependency.LEFT);
float groupSpace = 0.06f;
float barSpace = 0.02f; // x2 dataset
float barWidth = 0.45f; // x2 dataset
BarData d = new BarData();
d.addDataSet(barDataAbaixo);
d.addDataSet(barDataAcima);
d.setBarWidth(barWidth);
d.groupBars(0, groupSpace, barSpace); // start at x = 0
return d;
}
private LineData inserirLinhasGrafico(ArrayList<String> valoresCapMax, ArrayList<String> valoresMeta) {
LineData d = new LineData();
ArrayList<Entry> valorCapMax = new ArrayList<>();
ArrayList<Entry> valorMeta = new ArrayList<>();
int indexCapMax = 0;
int indexMeta = 0;
//Cap. Max
String[] partsCapMax = valoresCapMax.toString().split(",");
for (String part : partsCapMax) {
String[] empdata = part.split(":");
String strId = empdata[0].trim();
if (strId.contains("[")) {
strId = strId.replace("[", "");
} else {//strId.contains("]"))
if (strId.contains("]")) {
strId = strId.replace("]", "");
}
}
valorCapMax.add(new BarEntry(indexCapMax + 0.5f, Float.parseFloat(strId)));
indexCapMax = indexCapMax + 1;
}//endLoopCapMax
//Meta
String[] partsMeta = valoresMeta.toString().split(",");
for (String part : partsMeta) {
String[] empdata = part.split(":");
String strId = empdata[0].trim();
if (strId.contains("[")) {
strId = strId.replace("[", "");
} else {//strId.contains("]"))
if (strId.contains("]")) {
strId = strId.replace("]", "");
}
}
valorMeta.add(new BarEntry(indexMeta + 0.5f, Float.parseFloat(strId)));
indexMeta = indexMeta + 1;
}//endLoopMeta
LineDataSet set = dataSetMeta(valorMeta);
LineDataSet set5 = dataSetCapMax(valorCapMax);
set.setAxisDependency(YAxis.AxisDependency.LEFT);
set5.setAxisDependency(YAxis.AxisDependency.LEFT);
d.addDataSet(set);
d.addDataSet(set5);
return d;
}
private LineDataSet dataSetCapMax(ArrayList<Entry> entries) {
LineDataSet set = new LineDataSet(entries, "Cap. Max");
set.setColor(Color.rgb(56, 87, 35));
set.setLineWidth(2.5f);
set.setFillColor(Color.rgb(56, 87, 35));
//set.setMode(LineDataSet.Mode.LINEAR);
set.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);
set.setDrawValues(true);
set.setValueTextSize(10f);
set.setValueTextColor(Color.rgb(56, 87, 35));
return set;
}
private LineDataSet dataSetMeta(ArrayList<Entry> entries) {
LineDataSet set = new LineDataSet(entries, "Meta");
set.setColor(Color.rgb(146, 208, 80));
set.setLineWidth(2.5f);
set.setFillColor(Color.rgb(146, 208, 80));
set.setMode(LineDataSet.Mode.LINEAR);
set.setDrawValues(true);
set.setValueTextSize(10f);
set.setValueTextColor(Color.rgb(146, 208, 80));
return set;
}
private String buscaIndicadoTituloActivity() {
String titulo = "";
Indicador auxInd = indicadoresDao.obterIndicadorByCodind(codind, codugb);
if (auxInd != null) {
titulo = auxInd.getDesind();
} else {
titulo = "Indicadores Gráfico";
}
return titulo;
}
public Double getMaxArray(ArrayList<String> arrayString) {
Double ret = Double.valueOf(arrayString.get(0));
for (int i = 1; i < arrayString.size(); i++)
ret = Math.max(ret, Double.parseDouble(arrayString.get(i)));
return ret;
}
private void ajustarTela(Context context) {
getSupportActionBar().setElevation(0);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.verde)));
getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.verde));
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
String titulo = buscaIndicadoTituloActivity();
getSupportActionBar().setTitle(titulo);
//this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
private void ajustarGrafico(CombinedData data, CombinedChart ln_grafico) {
Double meta = getMaxArray(valoresMeta);
Double real = getMaxArray(valoresReal);
Double escala;
if (meta >= real) {
escala = meta + 10;
} else {
escala = real + 10;
}
ln_grafico.getAxisLeft().setAxisMinimum(0);
ln_grafico.getAxisLeft().setAxisMaximum((Float.parseFloat(String.valueOf(escala))));
ln_grafico.getAxisRight().setAxisMinimum(0);
ln_grafico.getAxisRight().setAxisMaximum((Float.parseFloat(String.valueOf(escala))));
ln_grafico.getXAxis().setAxisMaximum(data.getXMax() + 0.40f);
}
private void ajustarDimensoes(CombinedChart ln_grafico, final ArrayList<String> parametrosEscalaGrafico) {
YAxis rightAxis = ln_grafico.getAxisRight();
rightAxis.setDrawGridLines(false);
rightAxis.setAxisMinimum(0f);
YAxis leftAxis = ln_grafico.getAxisLeft();
leftAxis.setDrawGridLines(false);
leftAxis.setAxisMinimum(0);
XAxis xAxis = ln_grafico.getXAxis();
xAxis.setLabelRotationAngle(-60);//-45
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//define a posicao onde o texto da coluna sera fixado
xAxis.setAxisMinimum(0);
xAxis.setGranularity(1f);
xAxis.setGranularityEnabled(true);
//xAxis.setLabelCount(parametrosEscalaGrafico.size());
/*xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return parametrosEscalaGrafico.get((int) value % parametrosEscalaGrafico.size());
}
});*/
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return parametrosEscalaGrafico.get((int) value % parametrosEscalaGrafico.size());
}
});
}
private void ajustarLegenda(CombinedChart ln_grafico) {
Legend l = ln_grafico.getLegend();
l.setWordWrapEnabled(true);
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
}
private void ajustarGrafico(CombinedChart ln_grafico) {
ln_grafico.getDescription().setEnabled(false);
ln_grafico.setBackgroundColor(Color.WHITE);
ln_grafico.setDrawGridBackground(false);
ln_grafico.setDrawBarShadow(false);
ln_grafico.setHighlightFullBarEnabled(false);
/*ln_grafico.setDrawOrder(new CombinedChart.DrawOrder[]{
CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.BUBBLE, CombinedChart.DrawOrder.CANDLE, CombinedChart.DrawOrder.LINE, CombinedChart.DrawOrder.SCATTER
});*/
ln_grafico.setDrawOrder(new CombinedChart.DrawOrder[]{
CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.BUBBLE, CombinedChart.DrawOrder.CANDLE, CombinedChart.DrawOrder.LINE, CombinedChart.DrawOrder.SCATTER
});
}
@Override
public void onBackPressed() {
confirmarSaida();
}
private void confirmarSaida() {
ToolBox.exibirMessagem(context, "Confirmação de saída", "Deseja sair?", 0, true, "Sim",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
abrirFiltroIndicadoresGrafico();
}
},
"Nao",
null
);
}
private void abrirFiltroIndicadoresGrafico() {
Intent intent = new Intent(context, FiltroIndicadoresGrafico.class);
startActivity(intent);
overridePendingTransition(R.anim.left_in, R.anim.right_out);
finish();
}
apontamentoindicadorgrafico.class的输出:
[来自apontamentoindicadorgrafico.class的输出][1]
类组合了ChartActivity2:
公共类combinedchartactivity2扩展了appcompatactivity{
private CombinedChart ln_grafico;
private final int count = 12;
final String[] months = {"Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_apontamento_indicador_grafico);
setTitle("CombinedChartActivity2");
ln_grafico = findViewById(R.id.ln_grafico);
ajustarGrafico();
ajustarLegenda(ln_grafico);
YAxis rightAxis = ln_grafico.getAxisRight();
rightAxis.setDrawGridLines(false);
rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
YAxis leftAxis = ln_grafico.getAxisLeft();
leftAxis.setDrawGridLines(false);
leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
XAxis xAxis = ln_grafico.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);
xAxis.setAxisMinimum(0f);
xAxis.setGranularity(1);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return months[(int) value % months.length];
}
});
xAxis.setLabelRotationAngle(-30);
//xAxis.setCenterAxisLabels(true);//deixa o texto na base da coluna centralizado a coluna
//xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//define a posicao onde o texto da coluna sera fixado
xAxis.setGranularityEnabled(true);
CombinedData data = new CombinedData();
data.setData(generateLineData());
data.setData(generateBarData());
// data.setData(generateBubbleData());
// data.setData(generateScatterData());
// data.setData(generateCandleData());
//data.setValueTypeface(tfLight);
xAxis.setAxisMaximum(data.getXMax() + 0.25f);
ln_grafico.setData(data);
ln_grafico.invalidate();
}
private void ajustarGrafico() {
ln_grafico.getDescription().setEnabled(false);
ln_grafico.setBackgroundColor(Color.WHITE);
ln_grafico.setDrawGridBackground(false);
ln_grafico.setDrawBarShadow(false);
ln_grafico.setHighlightFullBarEnabled(false);
// draw bars behind lines
ln_grafico.setDrawOrder(new DrawOrder[]{
DrawOrder.BAR, DrawOrder.BUBBLE, DrawOrder.CANDLE, DrawOrder.LINE, DrawOrder.SCATTER
});
}
private void ajustarLegenda(CombinedChart ln_grafico) {
Legend l = ln_grafico.getLegend();
l.setWordWrapEnabled(true);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
}
private LineData generateLineData() {
LineData d = new LineData();
ArrayList<Entry> entries = new ArrayList<>();
for (int index = 0; index < count; index++)
entries.add(new Entry(index + 0.5f, getRandom(15, 5)));
LineDataSet set = new LineDataSet(entries, "Line DataSet");
set.setColor(Color.rgb(240, 238, 70));
set.setLineWidth(2.5f);
set.setCircleColor(Color.rgb(240, 238, 70));
set.setCircleRadius(5f);
set.setFillColor(Color.rgb(240, 238, 70));
set.setMode(LineDataSet.Mode.LINEAR);
set.setDrawValues(true);
set.setValueTextSize(10f);
set.setValueTextColor(Color.rgb(240, 238, 70));
set.setAxisDependency(YAxis.AxisDependency.LEFT);
d.addDataSet(set);
return d;
}
private float getRandom(int i, int i1) {
Random r = new Random();
int low = 10;
int high = 100;
int result = r.nextInt(high - low) + low;
return result;
}
private BarData generateBarData() {
ArrayList<BarEntry> listaValoresMeta = new ArrayList<>();
ArrayList<BarEntry> listaValoresReal = new ArrayList<>();
for (int y = 0; y < count; y++) {
// listaValoresMeta.add(new BarEntry(y + 0.5f, y + 10));
float itemReal = 50.1f;
if (y <= 5) {
listaValoresMeta.add(new BarEntry(y + 0.5f, itemReal));
listaValoresReal.add(new BarEntry(y + 0.5f, itemReal));
//listaValoresReal.add(new BarEntry(y + 0.5f, y + 15));
} else {
//listaValoresMeta.add(new BarEntry(y + 0.5f, y + 20));
listaValoresReal.add(new BarEntry(y + 0.5f, 25.35f));
listaValoresMeta.add(new BarEntry(y + 0.5f, 50.1f));
}
}
BarDataSet set0 = new BarDataSet(listaValoresMeta, "Real");
set0.setColor(Color.rgb(56, 56, 56));
set0.setStackLabels(new String[]{"Stack "});
//set.setColors(Color.rgb(56,56,56));
set0.setValueTextColor(Color.rgb(56, 56, 56));
BarDataSet set1 = new BarDataSet(listaValoresReal, "Bar 1");
set1.setColor(Color.rgb(60, 220, 78));
set1.setValueTextColor(Color.rgb(60, 220, 78));
set1.setValueTextSize(10f);
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
float groupSpace = 0.06f;
float barSpace = 0.02f; // x2 dataset
float barWidth = 0.8f; // x2 dataset
// (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"
BarData d = new BarData(set0, set1);
//BarData d = new BarData(set);
d.setBarWidth(barWidth);
// make this BarData object grouped
d.groupBars(0, groupSpace, barSpace); // start at x = 0
return d;
}
}
输出:combinedchartactivity2输出的
暂无答案!
目前还没有任何答案,快来回答吧!