控件项目地址:
https://github.com/PhilJay/MPAndroidChart
效果图
使用
- 1.导库
可以去下载jar包
下载地址:https://github.com/PhilJay/MPAndroidChart/releases
不过我是直接使用了MPChartLib-release.aar
下载地址:http://download.youkuaiyun.com/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;
}
}