XAxis 上的 MP Android Chart "Table"(XAxis 的自定义渲染器)

MP Android Chart "Table" on XAxis (Custom Renderer for XAxis)

你好,我想知道这种图形是否可以使用 MP Android 图表:

我真正需要的是用其他几个 UI 组件(在本例中是 4 个 TextView 和一个 ImageView)自定义整个 XAxis。

我一直在尝试不同的解决方案,例如使用 RecyclerView 并在其单元格内使用 BarChart,但我没有实现有效的 UI:

我也曾尝试在图表下方添加一个 ListView,但我无法根据图表同步和排序 ListView 单元格。

有什么想法吗?

您在图片中 post 制作的那种图形当然可以用 MPAndroidChart 实现,尽管并不容易。

你必须自己编写 XAxisRenderer 的子类:

ViewPortHandler vph = mChart.getViewPortHandler();
XAxisRenderer xAxisRenderer = new CustomXAxisRenderer(vph, mChart.getXAxis(), vph.getTransformer(AxisDependency.LEFT), image);
mChart.setXAxisRenderer(new CustomXAxisRenderer());

一个非常简单的概念验证看起来像这样:

public class CustomXAxisRenderer extends XAxisRenderer {

    Bitmap image;

    public CustomXAxisRenderer(ViewPortHandler viewPortHandler, XAxis xAxis, Transformer transformer, Bitmap image) {
        super(viewPortHandler, xAxis, transformer);
        this.image = image;
    }

    @Override
    protected void drawLabels(Canvas c, float pos, MPPointF anchor) {
        //same code as super class
        //then, code to draw the bitmap image on the canvas
        //and, code to draw the extra text
    }
}

请参阅以下答案以了解如何缩放位图图像并在 canvas 上绘制它们:

How to make a custom highlight drawable in MPAndroidChart

如果您有完整的解决方案,欢迎您在此处 post 作为答案。祝你好运!

概念验证注意事项:重写 drawLabels 有点粗糙。更好的解决方案是从 drawLabels 中提取一个单独的方法,并确保它在超类的 draw(Canvas c) 中被调用。如果您想这样做,请参阅