首先,我在我的应用程序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