如何获取图表的x和两个y轴值
How to get x and two y axis values of chart
我想得到X的值,以及两个Y轴的值,并显示在MarkerViev中。我怎样才能做到这一点?我的 markerview 代码和期望的结果如下所示。
public class MyMarkerView extends MarkerView {
private final TextView tvContent;
private final TextView tvTime;
public MyMarkerView(Context context, int layoutResource) {
super(context, layoutResource);
tvContent = findViewById(R.id.tvFuel);
tvTime = findViewById(R.id.time_chart);
}
// runs every time the MarkerView is redrawn, can be used to update the
// content (user-interface)
@Override
public void refreshContent(Entry e, Highlight highlight) {
if (e instanceof CandleEntry) {
CandleEntry ce = (CandleEntry) e;
tvContent.setText(Utils.formatNumber(ce.getHigh(), 0, true));
} else {
String fuelText = "Топливо: " + Utils.formatNumber(e.getY(), 0, true) + " л.";
tvContent.setText(fuelText);
//here get x string and second Y axis values...
}
super.refreshContent(e, highlight);
}
@Override
public MPPointF getOffset() {
return new MPPointF(-(getWidth() / 2), -getHeight());
}
}
Desired Result
感谢您的评论,Manu。我按如下方式解决了问题。
public class MyMarkerView extends MarkerView {
private final TextView tvFuel;
private final TextView tvTime;
private final TextView tvSpeed;
private Float[] mFuelSet;
private Float[] mSpeedSet;
private String[] mTimeSet;
public MyMarkerView(Context context, int layoutResource, Float[] fuelSet, Float[] speedSet, String[] timeSet) {
super(context, layoutResource);
tvFuel = findViewById(R.id.tvFuel);
tvSpeed = findViewById(R.id.tvSpeed);
tvTime = findViewById(R.id.time_chart);
mFuelSet = fuelSet;
mSpeedSet = speedSet;
mTimeSet = timeSet;
}
@Override
public void refreshContent(Entry e, Highlight highlight) {
if (e instanceof CandleEntry) {
CandleEntry ce = (CandleEntry) e;
tvFuel.setText(Utils.formatNumber(ce.getHigh(), 0, true));
} else {
int index = (int) e.getX();
String fuelText = "Топливо: " + mFuelSet[index] + " л.";
tvFuel.setText(fuelText);
String speedText = "Скорость: " + mSpeedSet[index] + " км/ч";
tvSpeed.setText(speedText);
String timeText = mTimeSet[index];
tvTime.setText(timeText);
}
super.refreshContent(e, highlight);
}
}
我想得到X的值,以及两个Y轴的值,并显示在MarkerViev中。我怎样才能做到这一点?我的 markerview 代码和期望的结果如下所示。
public class MyMarkerView extends MarkerView {
private final TextView tvContent;
private final TextView tvTime;
public MyMarkerView(Context context, int layoutResource) {
super(context, layoutResource);
tvContent = findViewById(R.id.tvFuel);
tvTime = findViewById(R.id.time_chart);
}
// runs every time the MarkerView is redrawn, can be used to update the
// content (user-interface)
@Override
public void refreshContent(Entry e, Highlight highlight) {
if (e instanceof CandleEntry) {
CandleEntry ce = (CandleEntry) e;
tvContent.setText(Utils.formatNumber(ce.getHigh(), 0, true));
} else {
String fuelText = "Топливо: " + Utils.formatNumber(e.getY(), 0, true) + " л.";
tvContent.setText(fuelText);
//here get x string and second Y axis values...
}
super.refreshContent(e, highlight);
}
@Override
public MPPointF getOffset() {
return new MPPointF(-(getWidth() / 2), -getHeight());
}
}
Desired Result
感谢您的评论,Manu。我按如下方式解决了问题。
public class MyMarkerView extends MarkerView {
private final TextView tvFuel;
private final TextView tvTime;
private final TextView tvSpeed;
private Float[] mFuelSet;
private Float[] mSpeedSet;
private String[] mTimeSet;
public MyMarkerView(Context context, int layoutResource, Float[] fuelSet, Float[] speedSet, String[] timeSet) {
super(context, layoutResource);
tvFuel = findViewById(R.id.tvFuel);
tvSpeed = findViewById(R.id.tvSpeed);
tvTime = findViewById(R.id.time_chart);
mFuelSet = fuelSet;
mSpeedSet = speedSet;
mTimeSet = timeSet;
}
@Override
public void refreshContent(Entry e, Highlight highlight) {
if (e instanceof CandleEntry) {
CandleEntry ce = (CandleEntry) e;
tvFuel.setText(Utils.formatNumber(ce.getHigh(), 0, true));
} else {
int index = (int) e.getX();
String fuelText = "Топливо: " + mFuelSet[index] + " л.";
tvFuel.setText(fuelText);
String speedText = "Скорость: " + mSpeedSet[index] + " км/ч";
tvSpeed.setText(speedText);
String timeText = mTimeSet[index];
tvTime.setText(timeText);
}
super.refreshContent(e, highlight);
}
}