关于Android hellocharts饼状图的bug

在实际项目开发中,我的饼状图颜色总是随机展示,有时候你进入该页面,颜色是正确的,但多数时候都不正确,并且这个饼图默认是可以旋转的,当颜色正确时,你转一下,颜色就不正确了,当颜色不正确时,你转一下,颜色也能正确,那么这很明显是个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);//设置饼图数据

猜你喜欢

转载自blog.csdn.net/yijiaodingqiankun/article/details/80970070
今日推荐