まず、アプリhttp://www.jjoe64.com/p/graphview-library.htmlでこのライブラリを使用してグラフを作成しています。次に、このコード (コメントで見つけたもの) を使用して、タッチ イベントの x 位置を取得します。
//intercepts touch events on the graphview
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
//when you touch the screen
case MotionEvent.ACTION_DOWN:
// gets the location of the touch on the graphview
float x = event.getX(event.getActionIndex());
// gets the boundries of what you are viewing from the function you just added
// vp is set to vp[0] = 0 & vp[1] = numDaysOil, numDaysOil could be anywhere from 2 to 30
double[] vp = graphOilView.getViewPort();
// gets the width of the graphview
int width = graphOilView.getWidth();
//gets the x-Value of the graph where you touched
@SuppressWarnings("unused")
double xValue = vp[0] + (x / width) * vp[1];
// trying a different ways to get different x vaules
double xVal = (x / width) * numDaysOil;
//add a method to lookup a value and do anything you want based on xValue.
break;
} // end switch
return super.dispatchTouchEvent(event);
} // end dispatchTouch Event
どこに触れるか (またはエミュレーターをクリックするか) に応じて、正しい x 値が得られますが、x 値が小さすぎたり大きすぎたりすることがあります。
誰でもこれについて何か洞察がありますか?
編集: グラフ内の場所をクリックすると、xValue が正しい x 値を返す場合と、y 値に対応する x 値よりも小さいまたは大きい xValue を返す場合があります。例 グラフ上のポイントを作成するために使用される x 値は 12 で y 値は 30 ですが、上記のコードで計算された xValue は 9 を返す可能性があります。そのため、x = 9 を検索しようとすると、間違った y 値が取得されます。グラフ化されているデータ: x: 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15 y: 5、16、8、11、1、30、20 、11、18、29、27、30、8、10、19