在实际项目开发中,我的饼状图颜色总是随机展示,有时候你进入该页面,颜色是正确的,但多数时候都不正确,并且这个饼图默认是可以旋转的,当颜色正确时,你转一下,颜色就不正确了,当颜色不正确时,你转一下,颜色也能正确,那么这很明显是个bug。请看下图,下图85%后面的背景颜色是我设置和需要的饼状图颜色,可是你看实际饼图的颜色却不是我设置和想要的。那么有的人可能会说了,这是因为你这好多种颜色在for循环里循环的结果,我一开始也是这么想的,结果却不是这样。
有bug的关键代码:
pieList = new ArrayList<SliceValue>(); /** * 总共的钱数 */ Float money_count = parseFloat(trade_money) + parseFloat(trade_weichat_money) + parseFloat(trade_alipay_money) + parseFloat(trade_bank_money) + parseFloat(trade_vip_money) + parseFloat(trade_coupon_money) + parseFloat(discount); float xianjin = parseFloat(trade_money) / money_count * 100; float weixin = parseFloat(trade_weichat_money) / money_count * 100; float zhifubao = parseFloat(trade_alipay_money) / money_count * 100; float yinhangka = parseFloat(trade_bank_money) / money_count * 100; float huiyuanka = parseFloat(trade_vip_money) / money_count * 100; float youhuiquan = parseFloat(trade_coupon_money) / money_count * 100; float dazhe = parseFloat(discount) / money_count * 100; Line cash = new Line(xianjin, R.color.cash); Line wechat = new Line(weixin, R.color.wechat); Line alipay = new Line(zhifubao, R.color.alipay); Line bankcard = new Line(yinhangka, R.color.bankcard); Line membershipcard = new Line(huiyuanka, R.color.membershipcard); Line coupon = new Line(youhuiquan, R.color.coupon); Line discount = new Line(dazhe, R.color.discount); ArrayList<Line> arrayList = new ArrayList<>(); arrayList.add(cash); arrayList.add(wechat); arrayList.add(alipay); arrayList.add(bankcard); arrayList.add(membershipcard); arrayList.add(coupon); arrayList.add(discount); for (int i = 0; i < arrayList.size(); i++) { if (arrayList != null && arrayList.size() > 0) { //创建一个新的值 SliceValue sliceValue = new SliceValue(); //设置每个扇形区域的值,float型 sliceValue.setValue(arrayList.get(i).getMoney()); //设置每个扇形区域的颜色 sliceValue.setColor(ContextCompat.getColor(getActivity(), arrayList.get(i).getColor())); //设置每个扇形区域的Lable,不设置的话,默认显示数值 sliceValue.setLabel((int) arrayList.get(i).getMoney() + "%"); pieList.add(sliceValue); } } PieChartData data = new PieChartData(pieList); data.setHasLabels(true); data.setHasLabelsOnlyForSelected(false); data.setHasLabelsOutside(true); reMonthPcv.setPieChartData(data);//设置饼图数据 }
color颜色 xml:
<color name="cash">#C0FF8C</color> <color name="wechat">#FFF78C</color> <color name="alipay">#FFD08B</color> <color name="bankcard">#8BEAFD</color> <color name="membershipcard">#FF8C9C</color> <color name="coupon">#D94E8A</color> <color name="discount">#FE9506</color> <color name="tabindicatorcolor">#ef763a</color> <color name="onegray">#acacac</color>
我用了3天3夜的时间,历经千辛万苦终于找到了bug,解决了这个bug。好废话不多说,直接上干货。
饼图的bug就是,当你设置数据时,所有饼图的分类中,
不能有0出现,如果有,就会出现上面描述的问题。
没有bug的饼图:
没有bug的关键代码:
pieList = new ArrayList<SliceValue>(); /** * 总共的钱数 */ Float money_count = parseFloat(trade_money) + parseFloat(trade_weichat_money) + parseFloat(trade_alipay_money) + parseFloat(trade_bank_money) + parseFloat(trade_vip_money) + parseFloat(trade_coupon_money) + parseFloat(discount); float xianjin = parseFloat(trade_money) / money_count * 100; float weixin = parseFloat(trade_weichat_money) / money_count * 100; float zhifubao = parseFloat(trade_alipay_money) / money_count * 100; float yinhangka = parseFloat(trade_bank_money) / money_count * 100; float huiyuanka = parseFloat(trade_vip_money) / money_count * 100; float youhuiquan = parseFloat(trade_coupon_money) / money_count * 100; float dazhe = parseFloat(discount) / money_count * 100; ArrayList<Line> arrayList = new ArrayList<>(); if (xianjin != 0) { Line cash = new Line(xianjin, R.color.cash); arrayList.add(cash); } if (weixin != 0) { Line wechat = new Line(weixin, R.color.wechat); arrayList.add(wechat); } if (zhifubao != 0) { Line alipay = new Line(zhifubao, R.color.alipay); arrayList.add(alipay); } if (yinhangka != 0) { Line bankcard = new Line(yinhangka, R.color.bankcard); arrayList.add(bankcard); } if (huiyuanka != 0) { Line membershipcard = new Line(huiyuanka, R.color.membershipcard); arrayList.add(membershipcard); } if (youhuiquan != 0) { Line coupon = new Line(youhuiquan, R.color.coupon); arrayList.add(coupon); } if (dazhe != 0) { Line discount = new Line(dazhe, R.color.discount); arrayList.add(discount); } for (int i = 0; i < arrayList.size(); i++) { if (arrayList != null && arrayList.size() > 0) { //创建一个新的值 SliceValue sliceValue = new SliceValue(); //设置每个扇形区域的值,float型 sliceValue.setValue(arrayList.get(i).getMoney()); //设置每个扇形区域的颜色 sliceValue.setColor(ContextCompat.getColor(getActivity(), arrayList.get(i).getColor())); //设置每个扇形区域的Lable,不设置的话,默认显示数值 sliceValue.setLabel((int) arrayList.get(i).getMoney() + "%"); pieList.add(sliceValue); } } PieChartData data = new PieChartData(pieList); data.setHasLabels(true); data.setHasLabelsOnlyForSelected(false); data.setHasLabelsOutside(true); reMonthPcv.setPieChartData(data);//设置饼图数据