MPAndroidChart onValueSelected仅适用于图标
我正在使用MPAndroidChart()库绘制一个简单的折线图,其中有一条线由表示为图标的点(值)连接 我正在使用OnChartValueSelectedListener:MPAndroidChart onValueSelected仅适用于图标,android,mpandroidchart,Android,Mpandroidchart,我正在使用MPAndroidChart()库绘制一个简单的折线图,其中有一条线由表示为图标的点(值)连接 我正在使用OnChartValueSelectedListener: //initialization mChart.setOnChartValueSelectedListener(this); //later in class public void onValueSelected(Entry e, Highlight h){ Log.i(TAG, "Something sele
//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.");
}
但在我的情况下,无论我点击哪里,我几乎总是选择ValueSelected而不是NothingSelected
所以,我点击了一个空白区域,但仍然选择了ValueSelected。“e”参数(条目)是离我单击的点最近的参数
我正在寻找一种解决方案,以检测我是否真的单击了图表上的图标,或者是否以某种方式更改了仅在执行此操作时才会引发的ValueSelected行为。看看这个示例。。。应该能解决你的问题
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");
}
});
}
}
及
这些方法几乎是不言自明的。即使你用自定义图标代替圆圈,你也可以使用“MaxHighlightDistance”数字来解决你的问题
在这种情况下,“circleRadius”和“MaxHighlightDistance”都为6f,只有当用户准确单击绘制的圆时,“onValueSelected”才会被调用。您可以将“MaxHighlightDistance”调整为10f或12f,以便在单击时给用户一些出错的空间。为什么不能简单地比较输入对象?您的意思是什么?我可以点击一个空白区域并引发此事件。谢谢您的回答!setMaxHighlightDistance实际上对我来说已经足够了,因为我并没有显示圆圈(只有图标)。我把它设置为22,因为在我看来6dp是一个非常小的数字。它很好用。再次感谢。
//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);