2017-09-14 123 views
0

我使用MPAndroidChart(https://github.com/PhilJay/MPAndroidChart)庫來繪製一個簡單的折線圖,其中我有一個由點(值)表示爲圖標的線。MPAndroidChart onValueSelected icon only

我使用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,無論我點擊。

所以,我點擊一個空的空間,仍然在onValueSelected。 'e'參數(Entry)是最接近我點擊的點。

我正在尋找一個解決方案來檢測,如果我真的點擊了圖表上的圖標或以某種方式改變onValueSelected行爲,只有提高時,我這樣做。

+0

爲什麼你不能簡單地比較Entry對象? –

+0

你是什麼意思?我可以點擊一個空白區域並獲得該事件。 – Makalele

回答

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); 

這些方法幾乎可以自我解釋。即使您使用自定義圖標代替圈子,也可以使用「MaxH ighlightDistance「數字並解決您的問題。

在這種情況下,無論是「circleRadius」和「MaxHighlightDistance」爲1207米,有「onValueSelected」將只有當用戶點擊恰好在繪製的圓調用。您可以將「MaxHighlightDistance」調整爲10f或12f,以便在點擊時給用戶一定的出錯空間。

+0

感謝您的回答! setMaxHighlightDistance是足以讓我實際的,因爲我沒有表現出圓我反正(唯一的圖標)。我把它設置爲22,因爲在我看來6dp是非常小的數額。它工作正常。再次感謝。 – Makalele