MPAndroidChart
MPAndroidChart copied to clipboard
How can I implement this function
这个库不太好绘制多个交点,绘制一个挺简单的。前者可能需要大改...
我这只做到了点击绿线画绿点,蓝线画蓝点,因为它是依赖单根线的,绘制一个点的时候并不知道另一个交点的坐标。如果有人知道解决方案,希望能指教下~
我这只做到了点击绿线画绿点,蓝线画蓝点,因为它是依赖单根线的,绘制一个点的时候并不知道另一个交点的坐标。如果有人知道解决方案,希望能指教下~
这个库不太好绘制多个交点,绘制一个挺简单的。前者可能需要大改...
我把源码弄下来,改改里面的东西实现了,不过你的这种markview我没有实现阴影,最后跟ui商量弄了个灰色的框完事儿
可以贴一下多交点绘制的核心代码吗?感谢。
阴影方案我用的ShadowLayout。https://github.com/lihangleo2/ShadowLayout 就一个类文件,导入很方便,用起来也很不错。
可以贴一下多交点绘制的核心代码吗?感谢。
@Override
public void drawHighlighted(Canvas c, Highlight[] indices) {
LineData lineData = mChart.getLineData();
int entryIndex = -1;
for (Highlight high : indices) {
ILineDataSet set = lineData.getDataSetByIndex(high.getDataSetIndex());
if (set == null || !set.isHighlightEnabled())
continue;
Entry e = set.getEntryForXValue(high.getX(), high.getY());
if (!isInBoundsX(e, set))
continue;
entryIndex = set.getEntryIndex(e);
MPPointD pix = mChart.getTransformer(set.getAxisDependency()).getPixelForValues(e.getX(), e.getY() * mAnimator
.getPhaseY());
high.setDraw((float) pix.x, (float) pix.y);
// draw the lines
drawHighlightLines(c, (float) pix.x, (float) pix.y, set);
}
if (entryIndex < 0) {
return;
}
if (mChart instanceof BarLineChartBase) {
BarLineChartBase chart = (BarLineChartBase) this.mChart;
if (chart.isHighlightSerial()) {
mHighlightPaint.reset();
mHighlightNodeBgPaint.reset();
mHighlightPaint.setAntiAlias(true);
mHighlightNodeBgPaint.setAntiAlias(true);
mHighlightPaint.setStrokeWidth(chart.getHighCircleWidth());
mHighlightPaint.setStyle(Paint.Style.STROKE);
mHighlightNodeBgPaint.setStyle(Paint.Style.FILL);
mHighlightNodeBgPaint.setColor(Color.WHITE);
List<ILineDataSet> dataSets = lineData.getDataSets();
for (ILineDataSet set :
dataSets) {
Entry e = set.getEntryForIndex(entryIndex);
MPPointD pix = mChart.getTransformer(set.getAxisDependency()).getPixelForValues(e.getX(), e.getY() * mAnimator
.getPhaseY());
drawHalo(c, (float) pix.x, (float) pix.y,chart, set);
}
}
}
}
private final Paint mHighlightPaint = new Paint();
private final Paint mHighlightNodeBgPaint = new Paint();
private void drawHalo(Canvas c, float x, float y, BarLineChartBase chart, ILineDataSet set) {
mHighlightPaint.setColor(set.getColor());
c.drawCircle(x, y, chart.getHighlightNodeRadius(), mHighlightNodeBgPaint);
c.drawCircle(x, y, chart.getHighlightNodeRadius(), mHighlightPaint);
}
可以贴一下多交点绘制的核心代码吗?感谢。
LineChartRenderer这个类里面
多谢!我研究下
代码很强,已经实现了这个功能。然后我这边的两条线对应的是每月的日子,每条线的数值个数可能不一样,加了个判断避免数组越位。
for (ILineDataSet set : dataSets) {
if (entryIndex < set.getEntryCount()) {
Entry e = set.getEntryForIndex(entryIndex);
MPPointD pix = mChart.getTransformer(set.getAxisDependency())
.getPixelForValues(e.getX(), e.getY() * mAnimator.getPhaseY());
drawHighlightPoint(c, (float) pix.x, (float) pix.y, chart, set);
}
}
代码很强,已经实现了这个功能。然后我这边的两条线对应的是每月的日子,每条线的数值个数可能不一样,加了个判断避免数组越位。
for (ILineDataSet set : dataSets) { if (entryIndex < set.getEntryCount()) { Entry e = set.getEntryForIndex(entryIndex); MPPointD pix = mChart.getTransformer(set.getAxisDependency()) .getPixelForValues(e.getX(), e.getY() * mAnimator.getPhaseY()); drawHighlightPoint(c, (float) pix.x, (float) pix.y, chart, set); } }
能解决就好,反正源码弄下来了,想怎么搞就怎么搞