Android中的明细饼图

时间:2018-09-10 11:19:19

标签: java android android-studio mpandroidchart

根据我的要求,我想在我的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索引,则再次调用相同的方法。但我想为两个饼图提供不同的功能。 请帮忙! 谢谢

1 个答案:

答案 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元素。我希望至少可以帮到你一点:)