您的位置:首页 > 移动开发 > Android开发

MPChart的饼状图使用

2016-07-06 10:37 537 查看
控件项目地址:

https://github.com/PhilJay/MPAndroidChart

效果图





使用

1.导库

可以去下载jar包

下载地址:https://github.com/PhilJay/MPAndroidChart/releases

不过我是直接使用了MPChartLib-release.aar

下载地址:http://download.csdn.net/detail/xiehao_95/9568403

build.gradle
设置

repositories {
flatDir {
dirs 'libs'
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
compile(name: 'MPChartLib-release', ext: 'aar')
}


2.布局

<?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">

<com.github.mikephil.charting.charts.PieChart
android:id="@+id/pieChart"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_marginBottom="80dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="50dp" />

</RelativeLayout>


3.java代码

public class MainActivity extends AppCompatActivity {

private PieChart mChart;

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

mChart = (PieChart) findViewById(R.id.pieChart);

int[] date = new int[]{1, 6, 8};
initPieChat(date);
}

private void initPieChat(int[] date) {
int sum = date[0] + date[1] + date[2];

mChart.setDescription("");
mChart.animateXY(1000, 1000);//设置动画效果
mChart.setDrawSliceText(false);//圆环上不绘制图例文字
mChart.setHoleRadius(68f);//设置内圆环半径
mChart.setCenterTextSize(12f);//设置中间文字中大小
mChart.setCenterText(generateCenterText(sum));
Legend legend = mChart.getLegend();//获取图例

if (sum == 0) {
mChart.setData(generateEmptyPieData());
mChart.setHighlightPerTapEnabled(false);//点击不响应
legend.setEnabled(false);//图例隐藏
return;
}

mChart.setData(generatePieData(date));

legend.setEnabled(true);//图例显示
legend.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER);//图例显示位置设置

mChart.setHighlightPerTapEnabled(true);//点击响应
mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {//圆盘点击事件
@Override
public void onValueSelected(Entry entry, int i, Highlight highlight) {
Toast.makeText(MainActivity.this, "" + entry.getXIndex(), Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected() {

}
});

}

/**
* 中间文字绘制
*
* @param sum 总数
* @return
*/
private SpannableString generateCenterText(int sum) {
String total = Integer.toString(sum);
SpannableString s = new SpannableString(total + "\n 设备总数(台)");
s.setSpan(new RelativeSizeSpan(5f), 0, total.length(), 0);
s.setSpan(new ForegroundColorSpan(Color.rgb(88, 146, 240)), 0, total.length(), 0);
s.setSpan(new ForegroundColorSpan(Color.rgb(153, 153, 153)), total.length(), s.length(), 0);
return s;
}

/**
* 图表数据设置
*
* @param date
* @return
*/
protected PieData generatePieData(int[] date) {
ArrayList<Entry> yVals = new ArrayList<>();
ArrayList<String> xVals = new ArrayList<>();

xVals.add("健康的设备");
xVals.add("报修中设备");
xVals.add("报修过设备");

yVals.add(new Entry((float) date[0], 0));
yVals.add(new Entry((float) date[1], 1));
yVals.add(new Entry((float) date[2], 2));

PieDataSet pieDataSet = new PieDataSet(yVals, "");
pieDataSet.setValueFormatter(new ValueFormatter() {//圆环内文字设置
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
int n = (int) value;

String str = n + "台";
if (n == 0) {
str = "";
}
return str;
}
});

ArrayList<Integer> colors = new ArrayList<>();
colors.add(Color.rgb(23, 213, 159));
colors.add(Color.rgb(245, 166, 35));
colors.add(Color.rgb(184, 233, 134));
pieDataSet.setColors(colors);//颜色设置

pieDataSet.setSliceSpace(2f);
pieDataSet.setValueTextColor(Color.WHITE);
pieDataSet.setValueTextSize(12f);

return new PieData(xVals, pieDataSet);
}

/**
* 空图表数据设置
*
* @return
*/
protected PieData generateEmptyPieData() {
ArrayList<Entry> yVals = new ArrayList<>();
ArrayList<String> xVals = new ArrayList<>();

xVals.add("无设备");
yVals.add(new Entry((float) 1, 1));

PieDataSet pieDataSet = new PieDataSet(yVals, "");
pieDataSet.setValueFormatter(new ValueFormatter() {//圆环内文字设置为空
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
return "";
}
});

ArrayList<Integer> colors = new ArrayList<>();
colors.add(Color.rgb(153, 153, 153));
pieDataSet.setColors(colors);

pieDataSet.setSliceSpace(2f);
pieDataSet.setValueTextColor(Color.WHITE);
pieDataSet.setValueTextSize(12f);

PieData pieData = new PieData(xVals, pieDataSet);

return pieData;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android