gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:39 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com