gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:10 28 4
gpt4 key购买 nike

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

最佳答案

是的,可以为 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));

哪里colorsList<Integer>已解析颜色(不是资源 ID)的大小与 IDataSet 中的条目数相同.由于您已经知道如何更改突出显示栏的颜色,因此该部分由您决定。只需操纵 colors以与通常相同的方式。这是一个示例输出:

bar chart with colors matching the bars

关于android - MPAndroidChart:我可以为 x 轴标签设置不同的颜色吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772646/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com