自版本v3.0.0以来,图表中的标记(弹出式视图)由IMarker界面表示。
IMarker界面
此界面允许您创建在图表中突出显示的条目上显示的自定义标记视图。界面提供的方法如下:
public interface IMarker {
/**
* @return您希望IMarker在x轴和y轴上具有所需的(一般)偏移量。
* 通过返回x: - (width / 2),您将水平放置IMarker。
* 返回y: - (height / 2),您将垂直居中放置IMarker。
*/
MPPointF getOffset();
/**
* @return在特定“点”处绘制的偏移量。这样可以对标记位置进行条件调整。
* 如果没有进行调整,返回getOffset()。
*
* @param posX这是标记想要绘制的X位置。
* 您可以根据此参数有条件地调整偏移量。
* @param posY这是标记想要绘制的X位置。
* 您可以根据此参数有条件地调整偏移量。
*/
MPPointF getOffsetForDrawingAtPos( float posX, float posY);
/**
* 此方法使指定的自定义IMarker可以在每次重新绘制IMarker时更新其内容。
*
* @param e IMarker所属的条目。这也可以是Entry的任何子类,如BarEntry或
* CandleEntry,只需在运行时将其转换。
* @param highlight该突出显示对象包含有关突出显示的值的信息,例如数据集索引,
* 选定范围或堆栈索引(仅堆叠条形条目)。
*/
void refreshContent( Entry e, Highlight highlight);
/**
*使用给定的Canvas对象在屏幕上的给定位置绘制IMarker。
*
* @param canvas
* @param posX
* @param posY
* /
void draw( Canvas canvas, float posX, float posY);
}
创建MarkerView
为了创建自定义标记视图,您需要创建一个实现该IMarker接口的新类:
public class YourMarkerView implements IMarker { ... }
从界面提供的方法返回的内容取决于您的个人需求。看看上面显示的方法文档,以便更好地了解。
我除了实现该IMarker接口之外,还可以创建自己的类并通过下面提到的预定义标记之一进行扩展。这种方法更容易,并且不需要实现IMarker接口提供的所有方法。只有特定的方法可以被覆盖和定制。最重要的是重写refreshContent(…)方法来调整由标记绘制的数据。一个简单的例子可能如下所示:
public class YourMarkerView 扩展了 MarkerView {
private TextView tvContent;
public MyMarkerView(Context context, int layoutResource) {
super(context, layoutResource);
//找到你的布局组件
tvContent = (TextView) findViewById(R.id.tvContent);
}
//回调每次的MarkerView重绘,可用于更新
//内容(用户界面)
@Override
public void refreshContent(Entry e, Highlight highlight) {
tvContent.setText("" + e.getY());
//这将执行必要的布局
super.refreshContent(e, highlight);
}
private MPPointF mOffset;
@Override
public MPPointF getOffset() {
if(mOffset == null) {
//水平和垂直
mOffset = new MPPointF(-(getWidth() / 2), -getHeight());
}
return mOffset;
}
}
获取/设置标记
为了将标记设置为图表,请使用以下setMarker(…)方法:
IMarker marker = new YourMarkerView();
chart.setMarker(marker);
要访问设置到图表的现有标记,请使用以下getMarker()方法:
IMarker marker = chart.getMarker();
预定标记
除了创建自己的自定义标记视图外,该库还提供了一些预定义的标记,以便更快速地使用。那些标记包括:
- MarkerView:基本标记。允许提供在图表上呈现的表示标记的布局资源。扩展此类并覆盖refreshContent(…)调整标记数据的方法。
- MarkerImage:用于绘制图像的标记。允许提供在图表上呈现代表标记的可绘制资源。扩展此类并覆盖refreshContent(…)调整标记数据的方法。
传统MarkerView
在v3.0.0之前的版本中,MarkerView该类负责在图表中突出显示的位置绘制标记。有关此类的详细信息,请访问旧的MarkerView wiki页面。