默认情况下在MpChart中显示标记视图

时间:2016-08-08 05:10:41

标签: android mpandroidchart

我正在使用 MpChart LineChart 来展示我的图表。我添加了多个数据集行。一切都很好。但我希望 MarkerView 应该设置在中间的某个点,默认情况下应该可见。此时标记视图仅在我触摸时才可见。有没有办法实现这个目标?

初始图

Initial graph 触摸图表后显示的标记视图

MarkerView

3 个答案:

答案 0 :(得分:2)

有帮助吗?

for (IDataSet set : mChart.getData().getDataSets())
     set.setDrawValues(true);

mChart.invalidate();

答案 1 :(得分:0)

在库中没有默认实现。 一种方法是修改库中的LineChartRenderer类。 MpAndroidCharts允许您在绘制的点上绘制圆,您可以通过为LineChartEntry定义新的构造函数并将位图传递给它来修改它。然后,您可以在绘制的点处绘制位图,而不是绘制的圆。

    ArrayList<Entry> values = new ArrayList<Entry>();
    Drawable d;
    for (int i = 0; i < dataList.size(); i++) {
        LineChartData data = dataList.get(i);
        float val = Float.valueOf(Utils.decimalValuePrecisionTwoPlaces((float) data.getDataVolGallon()));

        if (data.getImageIndex() >= 0) {

            d = ContextCompat.getDrawable(getContext(), resIcon[data.getImageIndex()]);
            bitmap = ((BitmapDrawable) d).getBitmap();
            bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth() / 2, bitmap.getHeight() / 2, false);
            values.add(new Entry(i, val, bitmap));
        } else {

            values.add(new Entry(i, val));
        }

    }

以上代码是如何使用和不使用位图设置条目的示例。

     if(e.getBitmap() != null)
            {
                c.drawBitmap(e.getBitmap(),mCirclesBuffer[0] - circleRadius, mCirclesBuffer[1] - circleRadius, mRenderPaint);
            }

这是从位图中绘制图像的代码,只需注释该行以在LineChartRenderer的drawCircles()中绘制圆圈,然后使用它。

如果您有任何疑问,请发表评论。希望这有帮助!

答案 2 :(得分:0)

我已经在这个lib的IOS版本中做到了这一点。但是正如文档所说,它们几乎是相同的,所以我希望我的回答是正确的“翻译”。 我所做的就是知道您的默认标记将始终显示。

默认点是应该锁定标记的位置,请基于HighestVisibleX或其他方式定义自己的点。

然后在第一次渲染时我强调这一点:

Highlight myFirstRenderedHighlight = new Highlight(myLockedMarkerPoint.x, 0); 
someChart.highlightValues(new Highlight[] { myFirstRenderedHighlight });

因此,即使您一直希望在沿x轴拖动时也要显示此点,则需要重画高光。这可以通过在chartTranslation上侦听来完成。这可以通过实现 OnChartGestureListener接口来完成。 onChartTranslate(),例如:

// same logic as picking first point with HighestVisibleX or something
Highlight movingHighlight = new Highlight(entryInLockedPoint.x,0); 
someChart.highlightValues(new Highlight[] { movingHighlight });

如果要标记多个图形,则从图表数据集中选择。 希望这就是您想要的:)