问题
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.
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.
回答1:
have you tried customizing with xml attribute android:translationY="-10dp"
?
OR view.setExtraOffsets(...);
you can manage dp
accordingly.
UPDATE
l.setYOffset(10f);
回答2:
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.
回答3:
Most probably there is an issue with the chart offsets. Try this, should solve your problem
pieChart.setExtraOffsets(0, 0, 0, 25);
This function sets extra offsets (around the chart view) to be appended to the auto-calculated offsets. The arguments are (left, top, right, bottom). Play around with the values to see which offsets suits your needs.
回答4:
Try to set padding or margin to PieChart , Or maybe align legend in horizontal direction.
来源:https://stackoverflow.com/questions/46953404/mpandroidchart-piechart-legends-cutting-issue-at-the-bottom-center