2017-04-21 38 views
0

在MPAndroid圖表庫中,如何在條形圖中點擊x軸或y軸項目中的每個單獨項目?如何用MPAndroid圖表庫在條形圖中單擊x軸或y軸上的每個單獨項目來打開不同的活動?

對於實施例:如果x中條形圖的軸線是1,2,3,4,5,6,7和條形圖的Y軸100,200,300,400,500,600,700

如果點擊1或100它應打開一個活動, 如果點擊2個或200應該打開另一個活動等..

MainActivity.java

public class MainActivity extends AppCompatActivity implements OnChartValueSelectedListener { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      BarChart barChart = (BarChart) findViewById(R.id.chart); 

    barChart.setHighlightPerTapEnabled(false); 


      barChart.setDescription(""); 
      // set xaxis at bottom 
      barChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM); 
      // set xaxis 
      barChart.getXAxis().setGridColor(Color.rgb(255,255,255)); 
      // set x axis text color 
      barChart.getXAxis().setTextColor(Color.argb(42,44,44,44)); 
      // HorizontalBarChart barChart= (HorizontalBarChart) findViewById(R.id.chart); 

      barChart.getAxisRight().setEnabled(false); 
      barChart.setScaleEnabled(false); 

      barChart.getLegend().setEnabled(false); 
      barChart.setTouchEnabled(true); 
      barChart.setDragEnabled(false); 
      barChart.setScaleEnabled(false); 
      barChart.setScaleXEnabled(false); 
      barChart.setScaleYEnabled(false); 
      barChart.setPinchZoom(false); 
      barChart.setHighlightPerDragEnabled(false); 
      barChart.setHighlightPerTapEnabled(false); 
      barChart.setDrawGridBackground(false); 
      barChart.setGridBackgroundColor(Color.rgb(255,255,255)); 
      barChart.getXAxis().setGridColor(Color.rgb(255,255,255)); 
      ArrayList<BarEntry> entries = new ArrayList<>(); 
      entries.add(new BarEntry(100, 0)); 
      entries.add(new BarEntry(200, 1)); 
      entries.add(new BarEntry(300, 2)); 
      entries.add(new BarEntry(400, 3)); 
      entries.add(new BarEntry(500, 4)); 
      entries.add(new BarEntry(600, 5)); 
      entries.add(new BarEntry(700, 6)); 
      barChart.setOnChartValueSelectedListener(this); 

      BarDataSet dataset = new BarDataSet(entries, "# of Calls"); 

      ArrayList<String> labels = new ArrayList<String>(); 
      labels.add("1"); 
      labels.add("2"); 
      labels.add("3"); 
      labels.add("4"); 
      labels.add("5"); 
      labels.add("6"); 
      labels.add("7"); 




      BarData data = new BarData(labels, dataset); 
      dataset.setColor(Color.rgb(33,200,215)); 

      barChart.setData(data); 
      barChart.animateY(5000); 

     } 

     @Override 
     public void onValueSelected(Entry e, int dataSetIndex, Highlight h) { 

       Intent i = new Intent(MainActivity.this, Second.class); 
       startActivity(i); 

     } 

     @Override 
     public void onNothingSelected() { 

     } 
    } 
+0

您是否檢查了有關在其圖表上添加事件的官方文檔? – AxelH

+1

[在MPAndroidChart中,如何爲條形圖中的每個條添加點擊事件?](http://stackoverflow.com/questions/28314966/in-mpandroidchart-how-to-add-the-click-event - 爲每個酒吧在條形圖) – AxelH

+0

@AxelH嘿,我不想顯示敬酒。我想爲每個欄項目點擊打開不同的活動(屏幕)?它是如何重複的? – Jacks

回答

0

請花一些時間閱讀wiki和javadoc的MPAndroidChart瞭解基本概念。請記住,您可以在PC上使用Ctr-Q或在Mac上使用Cmd-J,以獲取Android Studio中光標所在類的工具提示。

在MPAndroidChart 3.0.2解決方案看起來是這樣的:

@Override 
    public void onValueSelected(Entry e, Highlight h) { 
     float x = e.getX(); //get the x value 
     int roundedX = (int) Math.round(x); //round it to an integer 
     Intent nextActivity; 
     if (roundedX == 1) { 
      nextActivity = new Intent(MainActivity.this, FirstActivity.class); 
      startActivity(nextActivity); 
     } 
    } 

一個聰明的解決方案將存儲在一個數組或列表中的類的對象,而不是使用條件,但它是最好的嘗試簡潔至上。請花更多的時間學習Java和Android中的基本概念,否則你會發現很難取得進展。

+0

非常感謝您的時間,回答和建議。但是 float x = e.getX();在這種情況下不起作用。它不會進入下一個活動。 – Jacks

+0

它不起作用?此外,你可能會刪除重複的問題,否則人們會倒下它! –

+0

我想也許你正在使用舊版本的MPAndroidChart。你正在使用哪個版本?還記得你需要設置監聽器'barChart.setOnChartValueSelectedListener(this)' –

1

答案應該是這樣的(對於舊版本MPAndroidChart的):

通過e.getXIndex();,我們可以找到那麼X軸指數把狀態就可以了。每個單獨的項目點擊都會進行不同的活動

@Override 
public void onValueSelected(Entry e, int dataSetIndex, Highlight h) { 
    int x = e.getXIndex(); 

    if (x == 0) { 
     Intent j = new Intent(MainActivity.this, Second.class); 
     startActivity(j); 
    } 
    else if (x==1) { 
     Intent i= new Intent(MainActivity.this, Third.class); 
     startActivity(i); 
     } 
    else if (x==2) { 
     Intent k= new Intent(MainActivity.this, Fourth.class); 
     startActivity(k); 
    } 
    else if (x==3) { 
     Intent k1 = new Intent(MainActivity.this, Fifth.class); 
     startActivity(k1); 
    } 
    else if (x==4) { 
     Intent k2 = new Intent(MainActivity.this, Sixth.class); 
     startActivity(k2); 
    } 
    else if (x==5) { 
     Intent k3 = new Intent(MainActivity.this, Seventh.class); 
     startActivity(k3); 
    } 
    else if (x==6) { 
     Intent k4 = new Intent(MainActivity.this, Eight.class); 
     startActivity(k4); 
    } 
} 
+0

我爲您設置了格式化答案,並添加了有關舊版MPAndroidChart的註釋 –

相關問題