我正在使用MPAndroidChart(https://github.com/PhilJay/MPAndroidChart)库绘制一个简单的折线图,其中我有一条线由点(值)连接,表示为图标。
我正在使用OnChartValueSelectedListener:
//initialization
mChart.setOnChartValueSelectedListener(this);
//later in class
public void onValueSelected(Entry e, Highlight h){
Log.i(TAG, "Something selected.");
}
@Override
public void onNothingSelected() {
Log.i(TAG, "Nothing selected.");
}
但就我而言,无论我在哪里点击,我几乎总是在onValueSelected而不是onNothingSelected。
所以,我点击一个空白的空间,然后我仍然选择了值。 ' e' param(Entry)是我点击的最接近的一个。
我正在寻找一个解决方案,以检测我是否真的点击了图表上的图标,或者以某种方式改变了onValueSelected行为,只有在我这样做时才会提出。
答案 0 :(得分:1)
看看这个例子......应该解决你的问题
public class MpAndroidLineChartActivity extends AppCompatActivity {
LineChart mChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mp_android_line_chart);
mChart = (LineChart) findViewById(R.id.bar_chart);
mChart.getDescription().setEnabled(false);
mChart.setPinchZoom(false);
mChart.setDrawGridBackground(false);
XAxis xAxis = mChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setDrawGridLines(false);
leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
mChart.getAxisRight().setEnabled(false);
mChart.getLegend().setEnabled(false);
float[] val = {10, 20, 30, 40, 50};
ArrayList<Entry> entryList = new ArrayList<>();
for (int i = 0; i < val.length; i++) {
entryList.add(new BarEntry(i, val[i]));
}
LineDataSet set1 = new LineDataSet(entryList, "entryList");
set1.setColor(Color.BLUE);
set1.setDrawValues(false);
set1.setColor(Color.BLACK);
set1.setCircleColor(Color.BLACK);
set1.setCircleRadius(6f);
set1.setDrawCircleHole(false);
ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
dataSets.add(set1);
LineData data = new LineData(dataSets);
mChart.setData(data);
mChart.setScaleEnabled(false);
mChart.invalidate();
mChart.setMaxHighlightDistance(6f);
mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry e, Highlight h) {
Log.d("onValueSelected", "onValueSelected");
}
@Override
public void onNothingSelected() {
Log.d("onNothingSelected", "onNothingSelected");
}
});
}
}
确保将这些行添加到您的代码中......
//Sets the radius of the drawn circles.
set1.setCircleRadius(6f);
和
//Sets the maximum distance in screen dp a touch can be away from an entry to cause it to get highlighted.
mChart.setMaxHighlightDistance(6f);
这些方法非常自我解释。即使您使用自定义图标代替圆圈,也可以使用&#34; MaxHighlightDistance&#34;编号并解决您的问题。
在这种情况下,使用&#34; circleRadius&#34;和&#34; MaxHighlightDistance&#34; as 6f,&#34; onValueSelected&#34;仅在用户完全点击绘制的圆圈时才会调用。你可以调整&#34; MaxHighlightDistance&#34;到10f或12f,以便在点击时给用户一些错误的空间。