こんにちは、ユーザーが表示値の achartengine Point をクリックしたときにトーストを表示したいと思います。toScreenPoint メソッドを使用して画面位置の値を取得しようとしていますが、画面をパン (チャートを移動) した後、適切な画面ポイントを取得し、この値を Toast に設定すると、間違った値が返されます。私のコードを以下に示します。
chart=new TimeChart(dataset, charthelper.getXYMultipleSeriesRenderer());
graphview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SeriesSelection ss=graphview.getCurrentSeriesAndPoint();
if (ss == null) {
} else {
double[] screenPoint = chart.toScreenPoint(new double[] {
ss.getXValue(),ss.getValue() },0);
toast_textview.setText(ss.getValue()+"");
Toast toast=new Toast(getApplicationContext());
toast.setGravity(Gravity.TOP|Gravity.LEFT, (int)screenPoint[0],(int)screenPoint[1]);
toast.setView(toast_layout);
toast.show();
}
}
});
container_layout.addView(graphview,0);
【追記】 この方法で解決しました
/**
* set ontouch listener for double tap
*/
graphview.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
x = event.getX();
y = event.getY();
detector.onTouchEvent(event);
detector.setIsLongpressEnabled(true);
return false;
}
});
graphview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SeriesSelection ss = graphview.getCurrentSeriesAndPoint();
if (ss == null) {
} else {
/**
* toast display only series of value which index is
* zero
*/
if (ss.getSeriesIndex() == 0) {
toast_textview.setText(ss.getValue() + "");
Toast toast = new Toast(getApplicationContext());
DecimalFormat formatter = new DecimalFormat("##.##");
toast_textview.setText(formatter.format(ss.getValue()) + "");
toast.setGravity(Gravity.TOP | Gravity.LEFT, (int) x,
(int) y);
toast.setView(toast_layout);
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();
}
}
}
});