当前位置: 首页 > 知识库问答 >
问题:

MPAndroidChart:我可以为x轴标签设置不同的颜色吗?

屠盛
2023-03-14

所以我想在条形图中选择一个条形图,当我选择一个条形图时,它会改变条形图的颜色(我知道怎么做),但也会改变相应x轴标签的颜色。有没有办法做到这一点,如果有,谁能帮帮我吗?

共有1个答案

松雅健
2023-03-14

是的,可以为xAxis标签设置不同的颜色。您必须使用自定义渲染器,如下所示:

import android.graphics.Canvas;

import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.renderer.XAxisRenderer;
import com.github.mikephil.charting.utils.MPPointF;
import com.github.mikephil.charting.utils.Transformer;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;

import java.util.Collections;
import java.util.List;

/**
 * Created by rawsond on 29/01/17.
 */

public class ColoredLabelXAxisRenderer extends XAxisRenderer {

    List<Integer> labelColors;

    public ColoredLabelXAxisRenderer(ViewPortHandler viewPortHandler, XAxis xAxis, Transformer trans) {
        super(viewPortHandler, xAxis, trans);
        labelColors = Collections.EMPTY_LIST;
    }

    public ColoredLabelXAxisRenderer(ViewPortHandler viewPortHandler, XAxis xAxis, Transformer trans, List<Integer> colors) {
        super(viewPortHandler, xAxis, trans);
        this.labelColors = colors;
    }

    @Override
    protected void drawLabels(Canvas c, float pos, MPPointF anchor) {
        final float labelRotationAngleDegrees = mXAxis.getLabelRotationAngle();
        boolean centeringEnabled = mXAxis.isCenterAxisLabelsEnabled();

        float[] positions = new float[mXAxis.mEntryCount * 2];

        for (int i = 0; i < positions.length; i += 2) {

            // only fill x values
            if (centeringEnabled) {
                positions[i] = mXAxis.mCenteredEntries[i / 2];
            } else {
                positions[i] = mXAxis.mEntries[i / 2];
            }
        }

        mTrans.pointValuesToPixel(positions);

        for (int i = 0; i < positions.length; i += 2) {

            float x = positions[i];

            if (mViewPortHandler.isInBoundsX(x)) {

                String label = mXAxis.getValueFormatter().getFormattedValue(mXAxis.mEntries[i / 2], mXAxis);
                int color = getColorForXValue(mXAxis.mEntries[i / 2]); //added

                mAxisLabelPaint.setColor(color);

                if (mXAxis.isAvoidFirstLastClippingEnabled()) {

                    // avoid clipping of the last
                    if (i == mXAxis.mEntryCount - 1 && mXAxis.mEntryCount > 1) {
                        float width = Utils.calcTextWidth(mAxisLabelPaint, label);

                        if (width > mViewPortHandler.offsetRight() * 2
                                && x + width > mViewPortHandler.getChartWidth())
                            x -= width / 2;

                        // avoid clipping of the first
                    } else if (i == 0) {

                        float width = Utils.calcTextWidth(mAxisLabelPaint, label);
                        x += width / 2;
                    }
                }

                drawLabel(c, label, x, pos, anchor, labelRotationAngleDegrees);
            }
        }
    }

    private int getColorForXValue(int index) {
        if (index >= labelColors.size()) return mXAxis.getTextColor();

        if (index < 0) return mXAxis.getTextColor();

        return labelColors.get(index);
    }
}

像这样消费:

mChart.setXAxisRenderer(new ColoredLabelXAxisRenderer(mChart.getViewPortHandler(), mChart.getXAxis(), mChart.getTransformer(AxisDependency.LEFT), colors));

其中,颜色是一个列表

 类似资料:
  • 当数据不断传来时,整个堆栈向左移动时,条形图是动态添加的,有没有办法将第一个条形图的颜色设置为不同的颜色?谢谢。 编辑和解决方案:这是我在图表中添加新条目的代码,它每500毫左右动态发生一次。 感谢@Philip Jahoda,我让它正常工作,只需在您的addEntry方法中添加这段代码:

  • 在放大MPandroid图表时,是否可以更改X轴上的标签?我希望在开始时将年作为标签,而不是在缩放时变为月,然后是周(缩放时标签将变得更准确)。

  • 只是想知道是否有人知道如何在MPAndroidChart中为条形图设置高亮颜色?目前它就像一个深黑色(有点透明)的覆盖层。我想让它成为一个白色(有点透明)的覆盖层,甚至可能是一个渐变。有点像这样:

  • 问题内容: 我正在尝试设置取景器显示的彩色标签。我知道的唯一功能是setResourceValue。但这需要本地化名称! 我也可以想象自己的母语和英语,但我不知道其他所有人。我不敢相信,这应该是这样。 是are转换函数,它接受诸如enum或int的标准参数并提供本地化的颜色名称吗? 我参与其中,但是只支持两种语言(德语和英语): 问题答案: 要设置单一颜色,确实应该使用API​​调用。但是,您应该

  • 问题内容: 我知道您可以通过将节点的样式设置为来设置整个textArea / Field的颜色,但是有一种方法可以设置单个行而不是所有行的颜色,同时仍然保持textArea / Field可编辑? 问题答案: JavaFX的/ 不支持该功能。您可以将RichTextFX用于作业:

  • Android SDK提供了以下图标。 有没有办法给那些设置颜色...如果可能的话,怎么做? 使现代化 在对项目进行了完整的刷新之后,发现Xml中的属性起到了作用。 简而言之 ...这是为我工作的解决方案-将属性添加到ImageView xml: 来自@goldenb的答案是对解决这个问题的不同方法的全面介绍,所以我将其标记为答案。