ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 条形值的自定义位置

2019-06-23 02:23:29  阅读:199  来源: 互联网

标签:android mpandroidchart


我正在使用MPAndroidChart库来创建条形图.

我们可以使用以下内容在条形图顶部显示条形图值.

mChart.setDrawValueAboveBar(false);

或者我们可以使用这个:

barDataSet.setDrawValues(true);

显示栏内部的条形值.
我想知道我们是否可以为值设置自定义位置.例如,在y轴下方.

enter image description here

public class TextBarChartRenderer extends BarChartRenderer {

    public TextBarChartRenderer(BarDataProvider chart, ChartAnimator animator, ViewPortHandler viewPortHandler) {
        super(chart, animator, viewPortHandler);
    }

    @Override
    public void drawValues(Canvas c) {
        List<IBarDataSet> dataSets = mChart.getBarData().getDataSets();

        final float valueOffsetPlus = Utils.convertDpToPixel(22f)
        float negOffset;

        for (int i = 0; i < mChart.getBarData().getDataSetCount(); i++) {

            IBarDataSet dataSet = dataSets.get(i);
            applyValueTextStyle(dataSet);
            float valueTextHeight = Utils.calcTextHeight(mValuePaint, "8");
            negOffset = valueTextHeight + valueOffsetPlus;

            BarBuffer buffer = mBarBuffers[i];

            float left;
            float right;
            float top;
            float bottom;

            for (int j = 0; j < buffer.buffer.length * mAnimator.getPhaseX(); j += 4) {

                left = buffer.buffer[j];
                right = buffer.buffer[j + 2];
                top = buffer.buffer[j + 1];
                bottom = buffer.buffer[j + 3];

                float x = (left + right) / 2f;

                if (!mViewPortHandler.isInBoundsRight(x))
                    break;

                if (!mViewPortHandler.isInBoundsY(top) || !mViewPortHandler.isInBoundsLeft(x))
                    continue;

                BarEntry entry = dataSet.getEntryForIndex(j / 4);
                float val = entry.getY();

                if(val > 0) {
                    drawValue(c, dataSet.getValueFormatter(), val, entry, i, x,
                            (bottom + negOffset),
                            dataSet.getValueTextColor(j / 4));
                }
            }
        }

    }
}

还必须添加此值以使值可见

mChart.setExtraOffsets(0, 0, 0, 20);

解决方法:

API中没有公开的方法可以将值标签的位置更改为YAxis以下.您可能需要扩展和修改库以满足您不常见的要求.

尝试的一个选项是在XAxis上实现IAxisValueFormatter以呈现y值而不是x值.一个简单的例子可以重用现有的IndexAxisValueFormatter.假设你在一个名为yLabels的String []中有y值的标签.你现在可以这样做:

mChart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(yLabels));

如果这不起作用,你将不得不查看BarChartRenderer的源代码.有一个名为drawValues()的方法,你可以覆盖它来实现你想要的效果.

所以你会有类似的东西:

public class MyBarChartRenderer extends BarChartRenderer {

    //TODO: a constructor matching the superclass

    @Override
    public void drawValues(Canvas c) {
        //TODO: copy and paste the code from the superclass and simply
        //change the offset for drawing the labels
    }
}

标签:android,mpandroidchart
来源: https://codeday.me/bug/20190623/1266480.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有