Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPAndroidChart onValueSelected仅适用于图标_Android_Mpandroidchart - Fatal编程技术网

MPAndroidChart onValueSelected仅适用于图标

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

我正在使用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.");
}
但在我的情况下,无论我点击哪里,我几乎总是选择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);