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

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

上个月,我开发了一个应用程序,使用api mpandroid图表生成图形。
在最后一种情况下,我在包含字符串值列表的数组中的bardata上插入值,并转换为float(需要param)。
但是,在最后一个过程中,图形只显示整数值,比如“22”而不是“22.0”,代码是在2 java.class上开发的,apontamentoindicadoresgrafico2是发生错误的项目类;组合活动是不存在错误的类。
apontamentoindicadoresgrafic2.class类

  1. public class ApontamentoIndicadorGrafico3Activity extends AppCompatActivity {
  2. private Context context;
  3. private String codugb = "";
  4. private String codind = "";
  5. private final ArrayList<String> valoresData = new ArrayList<>();
  6. private final ArrayList<String> valoresReal = new ArrayList<>();
  7. private final ArrayList<String> valoresMeta = new ArrayList<>();
  8. private final ArrayList<String> valoresCapMax = new ArrayList<>();
  9. private ArrayList<String> parametrosEscalaGrafico = new ArrayList<>();
  10. private CombinedChart ln_grafico;
  11. private ApontamentoIndicadorGraficoDao apontamentoIndicadorGraficoDao;
  12. private IndicadoresDao indicadoresDao;
  13. @Override
  14. protected void onCreate(@Nullable Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_apontamento_indicador_grafico);
  17. inicializarVariaveis();
  18. inicializarAcoes();
  19. }
  20. private void inicializarVariaveis() {
  21. context = ApontamentoIndicadorGrafico3Activity.this;
  22. ln_grafico = findViewById(R.id.ln_grafico);
  23. apontamentoIndicadorGraficoDao = new ApontamentoIndicadorGraficoDao(context);
  24. indicadoresDao = new IndicadoresDao(context);
  25. codugb = getIntent().getStringExtra(IndicadoresDao.CODUGB);
  26. codind = getIntent().getStringExtra(IndicadoresDao.CODIND);
  27. ln_grafico = findViewById(R.id.ln_grafico);
  28. ajustarGrafico(ln_grafico);
  29. ajustarLegenda(ln_grafico);
  30. }
  31. private void inicializarAcoes() {
  32. ajustarTela(context);
  33. ArrayList<HMAux> retornoGrafico = apontamentoIndicadorGraficoDao.obterListaApontamentoIndicadorGrafico();
  34. if (retornoGrafico.size() > 0) {
  35. for (int i = 0; i < retornoGrafico.size(); i++) {
  36. HMAux item = retornoGrafico.get(i);
  37. String data = item.get(ApontamentoIndicadorGraficoDao.DATA);
  38. String meta = item.get(ApontamentoIndicadorGraficoDao.META);
  39. String real = item.get(ApontamentoIndicadorGraficoDao.REAL);
  40. String capmax = item.get(ApontamentoIndicadorGraficoDao.CAPMAX);
  41. valoresData.add(data.substring(0, 8));
  42. //valoresData.add(data);
  43. valoresMeta.add(meta);
  44. valoresReal.add(real);
  45. valoresCapMax.add(capmax);
  46. }//endLoopRetorno
  47. parametrosEscalaGrafico = new ArrayList<String>();
  48. String[] parts = valoresData.toString().split(",");
  49. for (String part : parts) {
  50. String[] empdata = part.split(":");
  51. String strId = empdata[0].trim();
  52. if (strId.contains("[")) {
  53. strId = strId.replace("[", "");
  54. } else {//strId.contains("]"))
  55. if (strId.contains("]")) {
  56. strId = strId.replace("]", "");
  57. }
  58. }
  59. parametrosEscalaGrafico.add(strId);
  60. }
  61. ajustarDimensoes(ln_grafico, parametrosEscalaGrafico);
  62. CombinedData data = new CombinedData();
  63. data.setData(inserirColunasGrafico(valoresReal, valoresMeta));
  64. data.setData(inserirLinhasGrafico(valoresCapMax, valoresMeta));
  65. ajustarGrafico(data, ln_grafico);
  66. ln_grafico.setData(data);
  67. ln_grafico.invalidate();
  68. } else {
  69. ToolBox.exibirMessagem(context, "Apontamento Indicador Gráfico", "Não foi possível exibir o gráfico", 0);
  70. ln_grafico.setNoDataText("Não foi possível exibir o gráfico");
  71. }
  72. }
  73. private BarData inserirColunasGrafico(ArrayList<String> valoresReal, ArrayList<String> valoresMeta) {
  74. ArrayList<BarEntry> listaValoresAcima = new ArrayList<>();
  75. ArrayList<BarEntry> listaValoresAbaixo = new ArrayList<>();
  76. //Float itemReal;
  77. //Float itemMeta;
  78. if (String.valueOf(valoresReal.size()).equals(String.valueOf(valoresMeta.size()))) {
  79. int index = 0;
  80. for (int position = 0; position < valoresReal.size(); position++) {
  81. float itemReal = Float.parseFloat(valoresReal.get(position));
  82. float itemMeta = Float.parseFloat(valoresMeta.get(position));
  83. if (itemReal >= itemMeta) {
  84. //listaValoresAcima.add(new BarEntry(index + 0.5f, itemReal));
  85. listaValoresAcima.add(new BarEntry(index + 0.5f, itemReal));
  86. listaValoresAbaixo.add(new BarEntry(index + 0.5f, 0));
  87. } else {
  88. // listaValoresAbaixo.add(new BarEntry(index + 0.5f, itemReal));
  89. listaValoresAbaixo.add(new BarEntry(index + 0.5f, itemReal));
  90. listaValoresAcima.add(new BarEntry(index + 0.5f, 0));
  91. }
  92. index = index + 1;
  93. }
  94. }
  95. //REAL
  96. BarDataSet barDataAcima = new BarDataSet(listaValoresAcima, "Acima");//Acima
  97. barDataAcima.setStackLabels(new String[]{"Stack 1"});
  98. //COLUNAS
  99. barDataAcima.setColor(Color.rgb(0, 0, 255));//Azul
  100. //TEXTO
  101. barDataAcima.setValueTextColor(Color.rgb(0, 0, 255));
  102. barDataAcima.setValueTextSize(10f);
  103. //barDataAcima.setAxisDependency(YAxis.AxisDependency.LEFT);
  104. //META
  105. BarDataSet barDataAbaixo = new BarDataSet(listaValoresAbaixo, "Abaixo");//Abaixo / Verm.
  106. barDataAbaixo.setStackLabels(new String[]{"Stack 1"});
  107. //COLUNAS
  108. barDataAbaixo.setColor(Color.rgb(255, 0, 0));//Vermelho
  109. //TEXTO
  110. barDataAbaixo.setValueTextColor(Color.rgb(255, 0, 0));//Vermelho
  111. barDataAbaixo.setValueTextSize(10f);
  112. barDataAbaixo.setAxisDependency(YAxis.AxisDependency.LEFT);
  113. float groupSpace = 0.06f;
  114. float barSpace = 0.02f; // x2 dataset
  115. float barWidth = 0.45f; // x2 dataset
  116. BarData d = new BarData();
  117. d.addDataSet(barDataAbaixo);
  118. d.addDataSet(barDataAcima);
  119. d.setBarWidth(barWidth);
  120. d.groupBars(0, groupSpace, barSpace); // start at x = 0
  121. return d;
  122. }
  123. private LineData inserirLinhasGrafico(ArrayList<String> valoresCapMax, ArrayList<String> valoresMeta) {
  124. LineData d = new LineData();
  125. ArrayList<Entry> valorCapMax = new ArrayList<>();
  126. ArrayList<Entry> valorMeta = new ArrayList<>();
  127. int indexCapMax = 0;
  128. int indexMeta = 0;
  129. //Cap. Max
  130. String[] partsCapMax = valoresCapMax.toString().split(",");
  131. for (String part : partsCapMax) {
  132. String[] empdata = part.split(":");
  133. String strId = empdata[0].trim();
  134. if (strId.contains("[")) {
  135. strId = strId.replace("[", "");
  136. } else {//strId.contains("]"))
  137. if (strId.contains("]")) {
  138. strId = strId.replace("]", "");
  139. }
  140. }
  141. valorCapMax.add(new BarEntry(indexCapMax + 0.5f, Float.parseFloat(strId)));
  142. indexCapMax = indexCapMax + 1;
  143. }//endLoopCapMax
  144. //Meta
  145. String[] partsMeta = valoresMeta.toString().split(",");
  146. for (String part : partsMeta) {
  147. String[] empdata = part.split(":");
  148. String strId = empdata[0].trim();
  149. if (strId.contains("[")) {
  150. strId = strId.replace("[", "");
  151. } else {//strId.contains("]"))
  152. if (strId.contains("]")) {
  153. strId = strId.replace("]", "");
  154. }
  155. }
  156. valorMeta.add(new BarEntry(indexMeta + 0.5f, Float.parseFloat(strId)));
  157. indexMeta = indexMeta + 1;
  158. }//endLoopMeta
  159. LineDataSet set = dataSetMeta(valorMeta);
  160. LineDataSet set5 = dataSetCapMax(valorCapMax);
  161. set.setAxisDependency(YAxis.AxisDependency.LEFT);
  162. set5.setAxisDependency(YAxis.AxisDependency.LEFT);
  163. d.addDataSet(set);
  164. d.addDataSet(set5);
  165. return d;
  166. }
  167. private LineDataSet dataSetCapMax(ArrayList<Entry> entries) {
  168. LineDataSet set = new LineDataSet(entries, "Cap. Max");
  169. set.setColor(Color.rgb(56, 87, 35));
  170. set.setLineWidth(2.5f);
  171. set.setFillColor(Color.rgb(56, 87, 35));
  172. //set.setMode(LineDataSet.Mode.LINEAR);
  173. set.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);
  174. set.setDrawValues(true);
  175. set.setValueTextSize(10f);
  176. set.setValueTextColor(Color.rgb(56, 87, 35));
  177. return set;
  178. }
  179. private LineDataSet dataSetMeta(ArrayList<Entry> entries) {
  180. LineDataSet set = new LineDataSet(entries, "Meta");
  181. set.setColor(Color.rgb(146, 208, 80));
  182. set.setLineWidth(2.5f);
  183. set.setFillColor(Color.rgb(146, 208, 80));
  184. set.setMode(LineDataSet.Mode.LINEAR);
  185. set.setDrawValues(true);
  186. set.setValueTextSize(10f);
  187. set.setValueTextColor(Color.rgb(146, 208, 80));
  188. return set;
  189. }
  190. private String buscaIndicadoTituloActivity() {
  191. String titulo = "";
  192. Indicador auxInd = indicadoresDao.obterIndicadorByCodind(codind, codugb);
  193. if (auxInd != null) {
  194. titulo = auxInd.getDesind();
  195. } else {
  196. titulo = "Indicadores Gráfico";
  197. }
  198. return titulo;
  199. }
  200. public Double getMaxArray(ArrayList<String> arrayString) {
  201. Double ret = Double.valueOf(arrayString.get(0));
  202. for (int i = 1; i < arrayString.size(); i++)
  203. ret = Math.max(ret, Double.parseDouble(arrayString.get(i)));
  204. return ret;
  205. }
  206. private void ajustarTela(Context context) {
  207. getSupportActionBar().setElevation(0);
  208. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.verde)));
  209. getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.verde));
  210. getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
  211. String titulo = buscaIndicadoTituloActivity();
  212. getSupportActionBar().setTitle(titulo);
  213. //this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  214. }
  215. private void ajustarGrafico(CombinedData data, CombinedChart ln_grafico) {
  216. Double meta = getMaxArray(valoresMeta);
  217. Double real = getMaxArray(valoresReal);
  218. Double escala;
  219. if (meta >= real) {
  220. escala = meta + 10;
  221. } else {
  222. escala = real + 10;
  223. }
  224. ln_grafico.getAxisLeft().setAxisMinimum(0);
  225. ln_grafico.getAxisLeft().setAxisMaximum((Float.parseFloat(String.valueOf(escala))));
  226. ln_grafico.getAxisRight().setAxisMinimum(0);
  227. ln_grafico.getAxisRight().setAxisMaximum((Float.parseFloat(String.valueOf(escala))));
  228. ln_grafico.getXAxis().setAxisMaximum(data.getXMax() + 0.40f);
  229. }
  230. private void ajustarDimensoes(CombinedChart ln_grafico, final ArrayList<String> parametrosEscalaGrafico) {
  231. YAxis rightAxis = ln_grafico.getAxisRight();
  232. rightAxis.setDrawGridLines(false);
  233. rightAxis.setAxisMinimum(0f);
  234. YAxis leftAxis = ln_grafico.getAxisLeft();
  235. leftAxis.setDrawGridLines(false);
  236. leftAxis.setAxisMinimum(0);
  237. XAxis xAxis = ln_grafico.getXAxis();
  238. xAxis.setLabelRotationAngle(-60);//-45
  239. xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//define a posicao onde o texto da coluna sera fixado
  240. xAxis.setAxisMinimum(0);
  241. xAxis.setGranularity(1f);
  242. xAxis.setGranularityEnabled(true);
  243. //xAxis.setLabelCount(parametrosEscalaGrafico.size());
  244. /*xAxis.setValueFormatter(new IAxisValueFormatter() {
  245. @Override
  246. public String getFormattedValue(float value, AxisBase axis) {
  247. return parametrosEscalaGrafico.get((int) value % parametrosEscalaGrafico.size());
  248. }
  249. });*/
  250. xAxis.setValueFormatter(new IAxisValueFormatter() {
  251. @Override
  252. public String getFormattedValue(float value, AxisBase axis) {
  253. return parametrosEscalaGrafico.get((int) value % parametrosEscalaGrafico.size());
  254. }
  255. });
  256. }
  257. private void ajustarLegenda(CombinedChart ln_grafico) {
  258. Legend l = ln_grafico.getLegend();
  259. l.setWordWrapEnabled(true);
  260. l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
  261. l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
  262. l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
  263. l.setDrawInside(false);
  264. }
  265. private void ajustarGrafico(CombinedChart ln_grafico) {
  266. ln_grafico.getDescription().setEnabled(false);
  267. ln_grafico.setBackgroundColor(Color.WHITE);
  268. ln_grafico.setDrawGridBackground(false);
  269. ln_grafico.setDrawBarShadow(false);
  270. ln_grafico.setHighlightFullBarEnabled(false);
  271. /*ln_grafico.setDrawOrder(new CombinedChart.DrawOrder[]{
  272. CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.BUBBLE, CombinedChart.DrawOrder.CANDLE, CombinedChart.DrawOrder.LINE, CombinedChart.DrawOrder.SCATTER
  273. });*/
  274. ln_grafico.setDrawOrder(new CombinedChart.DrawOrder[]{
  275. CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.BUBBLE, CombinedChart.DrawOrder.CANDLE, CombinedChart.DrawOrder.LINE, CombinedChart.DrawOrder.SCATTER
  276. });
  277. }
  278. @Override
  279. public void onBackPressed() {
  280. confirmarSaida();
  281. }
  282. private void confirmarSaida() {
  283. ToolBox.exibirMessagem(context, "Confirmação de saída", "Deseja sair?", 0, true, "Sim",
  284. new DialogInterface.OnClickListener() {
  285. @Override
  286. public void onClick(DialogInterface dialog, int which) {
  287. abrirFiltroIndicadoresGrafico();
  288. }
  289. },
  290. "Nao",
  291. null
  292. );
  293. }
  294. private void abrirFiltroIndicadoresGrafico() {
  295. Intent intent = new Intent(context, FiltroIndicadoresGrafico.class);
  296. startActivity(intent);
  297. overridePendingTransition(R.anim.left_in, R.anim.right_out);
  298. finish();
  299. }

apontamentoindicadorgrafico.class的输出:
[来自apontamentoindicadorgrafico.class的输出][1]
类组合了ChartActivity2:
公共类combinedchartactivity2扩展了appcompatactivity{

  1. private CombinedChart ln_grafico;
  2. private final int count = 12;
  3. final String[] months = {"Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"};
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  8. setContentView(R.layout.activity_apontamento_indicador_grafico);
  9. setTitle("CombinedChartActivity2");
  10. ln_grafico = findViewById(R.id.ln_grafico);
  11. ajustarGrafico();
  12. ajustarLegenda(ln_grafico);
  13. YAxis rightAxis = ln_grafico.getAxisRight();
  14. rightAxis.setDrawGridLines(false);
  15. rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
  16. YAxis leftAxis = ln_grafico.getAxisLeft();
  17. leftAxis.setDrawGridLines(false);
  18. leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
  19. XAxis xAxis = ln_grafico.getXAxis();
  20. xAxis.setPosition(XAxisPosition.BOTTOM);
  21. xAxis.setAxisMinimum(0f);
  22. xAxis.setGranularity(1);
  23. xAxis.setValueFormatter(new IAxisValueFormatter() {
  24. @Override
  25. public String getFormattedValue(float value, AxisBase axis) {
  26. return months[(int) value % months.length];
  27. }
  28. });
  29. xAxis.setLabelRotationAngle(-30);
  30. //xAxis.setCenterAxisLabels(true);//deixa o texto na base da coluna centralizado a coluna
  31. //xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//define a posicao onde o texto da coluna sera fixado
  32. xAxis.setGranularityEnabled(true);
  33. CombinedData data = new CombinedData();
  34. data.setData(generateLineData());
  35. data.setData(generateBarData());
  36. // data.setData(generateBubbleData());
  37. // data.setData(generateScatterData());
  38. // data.setData(generateCandleData());
  39. //data.setValueTypeface(tfLight);
  40. xAxis.setAxisMaximum(data.getXMax() + 0.25f);
  41. ln_grafico.setData(data);
  42. ln_grafico.invalidate();
  43. }
  44. private void ajustarGrafico() {
  45. ln_grafico.getDescription().setEnabled(false);
  46. ln_grafico.setBackgroundColor(Color.WHITE);
  47. ln_grafico.setDrawGridBackground(false);
  48. ln_grafico.setDrawBarShadow(false);
  49. ln_grafico.setHighlightFullBarEnabled(false);
  50. // draw bars behind lines
  51. ln_grafico.setDrawOrder(new DrawOrder[]{
  52. DrawOrder.BAR, DrawOrder.BUBBLE, DrawOrder.CANDLE, DrawOrder.LINE, DrawOrder.SCATTER
  53. });
  54. }
  55. private void ajustarLegenda(CombinedChart ln_grafico) {
  56. Legend l = ln_grafico.getLegend();
  57. l.setWordWrapEnabled(true);
  58. l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
  59. l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
  60. l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
  61. l.setDrawInside(false);
  62. }
  63. private LineData generateLineData() {
  64. LineData d = new LineData();
  65. ArrayList<Entry> entries = new ArrayList<>();
  66. for (int index = 0; index < count; index++)
  67. entries.add(new Entry(index + 0.5f, getRandom(15, 5)));
  68. LineDataSet set = new LineDataSet(entries, "Line DataSet");
  69. set.setColor(Color.rgb(240, 238, 70));
  70. set.setLineWidth(2.5f);
  71. set.setCircleColor(Color.rgb(240, 238, 70));
  72. set.setCircleRadius(5f);
  73. set.setFillColor(Color.rgb(240, 238, 70));
  74. set.setMode(LineDataSet.Mode.LINEAR);
  75. set.setDrawValues(true);
  76. set.setValueTextSize(10f);
  77. set.setValueTextColor(Color.rgb(240, 238, 70));
  78. set.setAxisDependency(YAxis.AxisDependency.LEFT);
  79. d.addDataSet(set);
  80. return d;
  81. }
  82. private float getRandom(int i, int i1) {
  83. Random r = new Random();
  84. int low = 10;
  85. int high = 100;
  86. int result = r.nextInt(high - low) + low;
  87. return result;
  88. }
  89. private BarData generateBarData() {
  90. ArrayList<BarEntry> listaValoresMeta = new ArrayList<>();
  91. ArrayList<BarEntry> listaValoresReal = new ArrayList<>();
  92. for (int y = 0; y < count; y++) {
  93. // listaValoresMeta.add(new BarEntry(y + 0.5f, y + 10));
  94. float itemReal = 50.1f;
  95. if (y <= 5) {
  96. listaValoresMeta.add(new BarEntry(y + 0.5f, itemReal));
  97. listaValoresReal.add(new BarEntry(y + 0.5f, itemReal));
  98. //listaValoresReal.add(new BarEntry(y + 0.5f, y + 15));
  99. } else {
  100. //listaValoresMeta.add(new BarEntry(y + 0.5f, y + 20));
  101. listaValoresReal.add(new BarEntry(y + 0.5f, 25.35f));
  102. listaValoresMeta.add(new BarEntry(y + 0.5f, 50.1f));
  103. }
  104. }
  105. BarDataSet set0 = new BarDataSet(listaValoresMeta, "Real");
  106. set0.setColor(Color.rgb(56, 56, 56));
  107. set0.setStackLabels(new String[]{"Stack "});
  108. //set.setColors(Color.rgb(56,56,56));
  109. set0.setValueTextColor(Color.rgb(56, 56, 56));
  110. BarDataSet set1 = new BarDataSet(listaValoresReal, "Bar 1");
  111. set1.setColor(Color.rgb(60, 220, 78));
  112. set1.setValueTextColor(Color.rgb(60, 220, 78));
  113. set1.setValueTextSize(10f);
  114. set1.setAxisDependency(YAxis.AxisDependency.LEFT);
  115. float groupSpace = 0.06f;
  116. float barSpace = 0.02f; // x2 dataset
  117. float barWidth = 0.8f; // x2 dataset
  118. // (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"
  119. BarData d = new BarData(set0, set1);
  120. //BarData d = new BarData(set);
  121. d.setBarWidth(barWidth);
  122. // make this BarData object grouped
  123. d.groupBars(0, groupSpace, barSpace); // start at x = 0
  124. return d;
  125. }

}
输出:combinedchartactivity2输出的

暂无答案!

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

相关问题