bardata与combinedchart相结合,返回的是整数值,而不是浮点值

4zcjmb1e  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(213)

上个月,我开发了一个应用程序,使用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输出的

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题