根据我的要求,我想在我的Android应用程序中使用饼图。我想在主要活动中至少显示2个饼图,并且正在使用 MPAndroid 来显示该图表。如何对我的主要活动布局中显示的所有三个图表使用onValueSelected方法。
package com.harshulexample.itochuparekh;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.formatter.PercentFormatter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import com.github.mikephil.charting.utils.ColorTemplate;
import java.util.ArrayList;
public class Piechart extends AppCompatActivity implements OnChartValueSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_piechart);
showCustomTitle();
showpiechart();
}
private void showCustomTitle(){
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1B4386")));
LayoutInflater li=getLayoutInflater();
View v = li.inflate(R.layout.tracking_actionbar, null);
actionBar.setCustomView(v);
}
private void showpiechart(){
PieChart pieChart = (PieChart) findViewById(R.id.piechart);
PieChart piechartt=findViewById(R.id.piechartt);
pieChart.setUsePercentValues(true);
piechartt.setUsePercentValues(true);
// IMPORTANT: In a PieChart, no values (Entry) should have the same
// xIndex (even if from different DataSets), since no values can be
// drawn above each other.
ArrayList<Entry> yvalues = new ArrayList<Entry>();
yvalues.add(new Entry(9f, 0));
yvalues.add(new Entry(13f, 1));
yvalues.add(new Entry(13f, 2));
yvalues.add(new Entry(25f, 3));
yvalues.add(new Entry(23f, 4));
yvalues.add(new Entry(17f, 5));
PieDataSet dataSet = new PieDataSet(yvalues, "Election Results");
ArrayList<String> xVals = new ArrayList<String>();
xVals.add("Unicharm");
xVals.add("Honda");
xVals.add("CPW");
xVals.add("Cremica");
xVals.add("SOfy");
xVals.add("Hero");
PieData data = new PieData(xVals, dataSet);
data.setValueFormatter(new PercentFormatter());
pieChart.setData(data);
piechartt.setData(data);
pieChart.setDescription("MAJOR CLIENTS");
piechartt.setDescription("MAJOR CLIENTS");
pieChart.setDrawHoleEnabled(true);
piechartt.setDrawHoleEnabled(true);
pieChart.setTransparentCircleRadius(25f);
pieChart.setHoleRadius(25f);
piechartt.setTransparentCircleRadius(25f);
piechartt.setHoleRadius(25f);
dataSet.setColors(new int[] { R.color.babypink, R.color.violet, R.color.yellow, R.color.Green,R.color.Blue,R.color.colorAccent,R.color.colorPrimary },this);
data.setValueTextSize(15f);
data.setValueTextColor(Color.DKGRAY);
pieChart.setOnChartValueSelectedListener(this);
piechartt.setOnChartValueSelectedListener(this);
pieChart.animateXY(1400, 1400);
piechartt.animateXY(1400, 1400);
}
@Override
public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
// if (e == null)
// return;
Log.d("Mobile",
"Value: " + e.getVal() + ", xIndex: " + e.getXIndex()
+ ", DataSet index: " + dataSetIndex+"name:"+e.toString()+"may be this:"+e.describeContents()+"or may be this:"+e.getData()+"Entry point: "+e+" Highlight: "+h.toString());
float value=e.getVal();
Log.d("Mobile","This is real value:"+value);
Intent intent=new Intent(this,secondpiechart.class);
intent.putExtra("Client",value);
startActivity(intent);
}
@Override
public void onNothingSelected() {
Log.i("PieChart", "nothing selected");
}
}
以下是我的主要活动布局。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".Piechart"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:gravity="center"
android:textStyle="bold"
android:text="PENDING TRANSACTIONS MONTH-SEP"/>
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/piechart"
android:layout_width="match_parent"
android:layout_height="500dp"/>
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/piechartt"
android:layout_width="match_parent"
android:layout_height="500dp"/>
</LinearLayout>
</ScrollView>
但是我说的是单击饼图中的一个饼(我的单个饼图中有6个饼)。我并不是说要点击整个馅饼。我的activity_piechat.xml中有两个饼形图,每个饼形图有6个。将数据和每个饼图的索引一起添加到饼图中时(在我的情况下,我的索引从0到5为6个饼),如果我将第一个饼图的索引设置为0到5,将6的索引设置为6-11第二个饼式聊天,那么onValueSelected方法根本不起作用。但是,如果我为两个图表都设置了0到5的相同索引值,则onValueSelected方法可以工作。假设我单击我的第一个饼图聊天的0索引饼图,然后调用onValueSelected方法。如果我单击第二个饼图的0索引,则再次调用相同的方法。但我想为两个饼图提供不同的功能。 请帮忙! 谢谢
答案 0 :(得分:0)
编写您的方法来声明给定的不同饼图:
PieChart pieChart = (PieChart) findViewById(R.id.piechart);
PieChart piechartt=findViewById(R.id.piechartt);
但问题是,我猜这还不够。您必须为每个饼图创建一个方法/侦听器。
它的工作方式必须与按钮相同。
如果您真的只想使用一个“ onValueSelected”,则必须尝试如下操作:
public class Piechart extends AppCompatActivity implements OnChartValueSelectedListener {
@Override
public void OnChartValueSelected(View v) {
switch (v.getId()) {
case R.id.pieChart:
// code for piechart 1 when onSelect.
break;
case R.id.pieChartt:
// do your code
break;
case R.id.pieCharttt:
// do your code
break;
default:
break;
}
}
}
另一个问题可能是,它不是标准的android元素。我希望至少可以帮到你一点:)