水平条形图方向

发布于 2025-02-06 15:18:24 字数 78 浏览 1 评论 0原文

是否可以创建水平条形图并从右到左绘制条形图?只需做镜子反射即可。我不能在XML中使用旋转,因为标签也会逆转。

Is it possible to create Horizontal Bar Chart and draw bars from right to left? Just make mirror reflection. I can't use rotate in my xml because label also will be reversed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

油饼 2025-02-13 15:18:24

您可以将渲染从Horizo​​ntalBarcharTrenderer更改为定制的渲染和覆盖函数:受保护的void drawDataSet(Canvas c,ibardataset数据集,int Index);
在“ //初始化缓冲区”时添加这些行

BarBuffer buffer = mBarBuffers[index];
buffer.setPhases(phaseX, phaseY);
buffer.setDataSet(index);
buffer.setInverted(mChart.isInverted(dataSet.getAxisDependency()));
buffer.setBarWidth(mChart.getBarData().getBarWidth());

buffer.feed(dataSet);

trans.pointValuesToPixel(buffer.buffer);

final boolean isSingleColor = dataSet.getColors().size() == 1;

if (isSingleColor) {
    mRenderPaint.setColor(dataSet.getColor());
}

for (int j = 0; j < buffer.size(); j += 4) {

    if (!mViewPortHandler.isInBoundsTop(buffer.buffer[j + 3]))
        break;

    if (!mViewPortHandler.isInBoundsBottom(buffer.buffer[j + 1]))
        continue;

    if (!isSingleColor) {
        // Set the color for the currently drawn value. If the index
        // is out of bounds, reuse colors.
        mRenderPaint.setColor(dataSet.getColor(j / 4));
    }

    // NEWLY ADDED CODE BELOW
    float left = buffer.buffer[j];
    float right = buffer.buffer[j + 2];
    float midLine = (mViewPortHandler.contentLeft() + mViewPortHandler.contentRight()) / 2;
    buffer.buffer[j] = midLine + (midLine - right);
    buffer.buffer[j + 2] = midLine + (midLine - left);

看起来像这样:

You can change the render from HorizontalBarChartRenderer to your customed render, and override function :protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index);
add these lines after " // initialize the buffer"

BarBuffer buffer = mBarBuffers[index];
buffer.setPhases(phaseX, phaseY);
buffer.setDataSet(index);
buffer.setInverted(mChart.isInverted(dataSet.getAxisDependency()));
buffer.setBarWidth(mChart.getBarData().getBarWidth());

buffer.feed(dataSet);

trans.pointValuesToPixel(buffer.buffer);

final boolean isSingleColor = dataSet.getColors().size() == 1;

if (isSingleColor) {
    mRenderPaint.setColor(dataSet.getColor());
}

for (int j = 0; j < buffer.size(); j += 4) {

    if (!mViewPortHandler.isInBoundsTop(buffer.buffer[j + 3]))
        break;

    if (!mViewPortHandler.isInBoundsBottom(buffer.buffer[j + 1]))
        continue;

    if (!isSingleColor) {
        // Set the color for the currently drawn value. If the index
        // is out of bounds, reuse colors.
        mRenderPaint.setColor(dataSet.getColor(j / 4));
    }

    // NEWLY ADDED CODE BELOW
    float left = buffer.buffer[j];
    float right = buffer.buffer[j + 2];
    float midLine = (mViewPortHandler.contentLeft() + mViewPortHandler.contentRight()) / 2;
    buffer.buffer[j] = midLine + (midLine - right);
    buffer.buffer[j + 2] = midLine + (midLine - left);

look like this:
enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文