Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MpAndroidChart Piechart legends cutting issue at the bottom center

I have attached the screenshot of my usage chart. In red box display the legends and they are cutting in pie chart. Below is my code:

pieChart.setUsePercentValues(false);
pieChart.getDescription().setEnabled(false);
pieChart.setDragDecelerationFrictionCoef(0.95f);
pieChart.setDrawHoleEnabled(true);
pieChart.setHoleColor(Color.WHITE);
pieChart.setTransparentCircleColor(Color.WHITE);
pieChart.setTransparentCircleAlpha(110);
pieChart.setHoleRadius(55f);
pieChart.setTransparentCircleRadius(57f);
pieChart.setDrawCenterText(true);
pieChart.setRotationAngle(0);
// enable rotation of the chart by touch
pieChart.setRotationEnabled(true);
pieChart.setHighlightPerTapEnabled(true);
// add a selection listener
pieChart.setOnChartValueSelectedListener(this);
pieChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);

Legend l = pieChart.getLegend();
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
l.setOrientation(Legend.LegendOrientation.VERTICAL);
l.setDrawInside(false);
l.setForm(Legend.LegendForm.CIRCLE);
l.setXEntrySpace(7f);
l.setYEntrySpace(0f);
l.setYOffset(0f);
l.setWordWrapEnabled(true);
l.setDrawInside(false);
l.getCalculatedLineSizes();

// entry label styling
pieChart.setEntryLabelColor(Color.WHITE);
pieChart.setEntryLabelTextSize(12f);

Can anyone knows the answer? Please help me to solve this issue.Thanks In advance.

enter image description here

Update:

Below is my xml file to dispaly chart.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/AppTheme"
tools:context="com.visualogyx.app.activity.SettingsActivity$PlaceholderFragment">

<RelativeLayout
    android:id="@+id/linear_change_usage"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/relative_text_dropdown_arraow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/light_grey">

        <TextView
            android:id="@+id/textview_usage_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginLeft="22dp"
            android:layout_marginRight="22dp"
            android:layout_marginTop="16dp"
            android:text="Tasks"
            android:textColor="@color/black"
            android:textSize="17sp" />

        <ImageView
            android:id="@+id/dropdown_arraow"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="16dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="16dp"
            android:src="@drawable/ic_arrow_drop_down_black_24dp" />
    </RelativeLayout>

    <com.github.mikephil.charting.charts.PieChart
        android:id="@+id/chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/relative_text_dropdown_arraow" />

</RelativeLayout>

<ProgressBar
    android:id="@+id/display_chart_progress"
    style="?android:attr/progressBarStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:visibility="gone" />
</RelativeLayout>

Issue - Whenever I populate the graph, the graph legends is automatically cropped from bottom. If i put the same legends in center then it is working fine but issue occurs in bottom only.

like image 535
Grishma Ukani Avatar asked Dec 18 '22 03:12

Grishma Ukani


2 Answers

have you tried customizing with xml attribute android:translationY="-10dp" ?

OR view.setExtraOffsets(...);

you can manage dp accordingly.

UPDATE

l.setYOffset(10f);

like image 100
Aks4125 Avatar answered May 16 '23 05:05

Aks4125


i have solved this issue by adding the titles in normal list view

 ListView list = (ListView) findViewById(R.id.list_chart);
 list.setAdapter(new ChartTextLegendAdapter(this, values, colors));

and hide the titles within Legend

this is my layout XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:background="@color/background_color">

    <com.github.mikephil.charting.charts.PieChart
        android:id="@+id/chart1"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <ListView
        android:id="@+id/list_chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/chart1" />

</RelativeLayout>

and dont forgot to pass the values and ArrayList of colors manully

 for (int c : ColorTemplate.PASTEL_COLORS)
            colors.add(c);
        for (int c : ColorTemplate.LIBERTY_COLORS)
            colors.add(c);
        for (int c : ColorTemplate.COLORFUL_COLORS)
            colors.add(c);
        for (int c : ColorTemplate.JOYFUL_COLORS)
            colors.add(c);
        for (int c : ColorTemplate.VORDIPLOM_COLORS)
            colors.add(c);

        colors.add(ColorTemplate.getHoloBlue());


        values.DetailAmount = getIntent().getStringArrayListExtra("amount");
        values.DetailId = getIntent().getIntegerArrayListExtra("id");
        values.DetailName = getIntent().getStringArrayListExtra("names");
        values.DetailEnglishName = getIntent().getStringArrayListExtra("enames");
        month_name = getIntent().getStringExtra("month_name");

hope this will solve your issue too.

like image 31
AbuQauod Avatar answered May 16 '23 06:05

AbuQauod