MarkerView 走出图表以获取图表上的最后一个点

2024-04-18

我正在使用 MarkerView 类在图表中显示标记视图。我创建的标记视图布局包含两个文本视图,一个在另一个下面。

我面临的问题是图表上最后一点的标记视图一半在图表内,一半在图表外。下面两张图清楚地说明了问题:

第一张图片显示了图表中心点的标记视图,显示没有任何问题:

第二张图片(如下所示)显示了图表最后一个点的标记视图,该点位于图表内的一半。

如何调整此标记视图以使其显示在图表区域内。

wiki 没有说明标记视图的任何自定义。还有更多定制吗?

另外,在多折线图的情况下,如果我仅单击其中一个线点,则标记视图不会出现问题。但是,如果我单击另一行上任何点的标记视图,应用程序就会失败。知道为什么会发生这种情况。

MarkerView 类的代码如下:

public class TooltipView extends MarkerView {

private BaseGraphMetadata mBaseGraphMetadata;

private TextView mTooltipDate, mTooltipValue;

public TooltipView(Context context, int layoutResource, BaseGraphMetadata baseGraphMetadata) {
    super(context, layoutResource);
    mTooltipDate = (TextView)findViewById(R.id.tooltip_date);
    mTooltipValue = (TextView)findViewById(R.id.tooltip_value);
    mBaseGraphMetadata = baseGraphMetadata;
}

@Override
public void refreshContent(Entry entry, int i) {
    List<DrillDownInfo> drillDownInfoList = (List<DrillDownInfo>) entry.getData();
    DrillDownInfo drillDownInfo = drillDownInfoList.get(i);
    Map<String, String> group = drillDownInfo.getGroupByNameVsGroupByValue();
    Iterator iterator = group.entrySet().iterator();
    while (iterator.hasNext()) {
        Map.Entry pair = (Map.Entry)iterator.next();
        if(pair.getKey()!=null && pair.getValue()!=null) {
            String key = (String) pair.getKey();
            key = key.toUpperCase();
            Double value = Double.parseDouble((String) pair.getValue());
            String formattedValue = mBaseGraphMetadata.getDataFormatter().getFormattedValue(value);
            mTooltipDate.setText(key + " : " + formattedValue);
        }
        iterator.remove();
    }
    mTooltipValue.setText(String.valueOf("VALUE : "+entry.getVal()));
}

@Override
public int getXOffset() {
    return -(getWidth() / 2);
}

@Override
public int getYOffset() {
    return -getHeight();
}
}

我找到了解决这个问题的简单方法。您需要在自定义标记视图中设置图表,如下所示:

setChartView(chart);

..并重写绘制方法,如下所示:

@Override
public void draw(Canvas canvas, float posX, float posY) {
    super.draw(canvas, posX, posY);
    getOffsetForDrawingAtPoint(posX, posY);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MarkerView 走出图表以获取图表上的最后一个点 的相关文章

随机推荐