android - MarkerView 在图表上的最后一个点超出图表

标签 android charts mpandroidchart

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

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

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

enter image description here

第二张图片,如下所示,显示了图表最后一个点的标记 View ,它位于图表的一半范围内。

enter image description here

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

wiki 没有说明任何针对 markerview 的定制。还有更多的定制吗?

此外,如果是多折线图,如果我只单击其中一个折线点,则 markerview 不会出现问题。但是,如果我在另一条线上的任何一点上单击标记 View ,应用程序就会失败。知道为什么会这样。

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();
}
}

最佳答案

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

setChartView(chart);

..并重写绘制方法如下:

@Override
public void draw(Canvas canvas, float posX, float posY) {
    super.draw(canvas, posX, posY);
    getOffsetForDrawingAtPoint(posX, posY);
}

关于android - MarkerView 在图表上的最后一个点超出图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30169327/

相关文章:

javascript - jQuery 的 ajax 函数在 Android PhoneGap 应用程序中不起作用

Android usb 主机 api 和 USB 存储

java - 相同的异步任务但 onPostExecute() 中的不同结果处理

javascript - 如何删除填充图表js

javascript - 谷歌条形图不会是透明背景

android - 如何根据可见数据缩放图形?

从 MIFARE Classic NFC 标签读取的 Android 示例?

graph - 创建包含多个调查结果的 Excel 图表

android - 如何在 MPAndroidChart 中隐藏图例和轴?

android - MPAndroidChart 起始条在 0 以外的其他地方