Я использую класс MarkerView для отображения маркеров в диаграмме. Макет markerview, который я создал, содержит два текстовых поля, один под другим.
Проблема, с которой я сталкиваюсь, заключается в том, что маркер для последней точки на диаграмме находится наполовину внутри диаграммы и наполовину вне графика. Два изображения ниже четко указывают проблему:
Первое изображение показывает маркер для точки в центре диаграммы, которая показывает без проблем:
Второе изображение, как показано ниже, показывает markerview для последней точки диаграммы, которая находится в половине диаграммы.
Как мне настроить этот маркер, чтобы он отображался в области диаграммы.
В вики не указано никаких настроек для markerview. Есть ли еще какие-то настройки?
Кроме того, в случае многострочной диаграммы, если я нажимаю только на одну из точек линии, markerview возникает без проблем. Но если я нажму на markerview в любой точке другой строки, приложение завершится неудачно. Любая идея, почему это происходит.
Код класса 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();
}
}