我正在使用 MpChart LineChart 来展示我的图表。我添加了多个数据集行。一切都很好。但我希望 MarkerView 应该设置在中间的某个点,默认情况下应该可见。此时标记视图仅在我触摸时才可见。有没有办法实现这个目标?
初始图
答案 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 });
如果要标记多个图形,则从图表数据集中选择。 希望这就是您想要的:)