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

MPAndroidChart之辅助工具类封装

2017-03-01 09:30 453 查看
该辅助工具类是自己在项目中进行的一些封装,虽然又大多数的参数是写死了的,但是也适用于一般的情况,减少代码量。下面就给出代码,有用的可以参考一下:

public class LineChartUtils {

/**
* 设置图表数据的方法
* @param lineChart 要设置数据的图表
* @param formData  表格的Y轴数据
* @param mode      线条形状
* @param fadeDrawableId 阴影区渐变色的Drawable文件id
* @param color    线条的颜色设置
*/
public static void setLineData(Context context, LineChart lineChart, List<Float> formData, LineDataSet.Mode mode, int fadeDrawableId,int color) {

//根据Y轴数据产生表格数据
ArrayList<Entry> values = new ArrayList<>();
for (int i = 0; i < formData.size(); i++) {
values.add(new Entry(i,formData.get(i)));
}

LineDataSet set1;
if (lineChart.getData() != null &&
lineChart.getData().getDataSetCount() > 0) {
set1 = (LineDataSet) lineChart.getData().getDataSetByIndex(0);
set1.setValues(values);
lineChart.getData().notifyDataChanged();
lineChart.notifyDataSetChanged();
} else {
set1 = new LineDataSet(values, "悠唐数据报表");
set1.setDrawValues(false); //不显示数值
set1.setDrawCircles(false); //数值不以原点显示
set1.setMode(mode); //设置线条的形状
set1.setColor(color);    //设置线条颜色
set1.setDrawHorizontalHighlightIndicator(false);
set1.setHighLightColor(color);

//set1.enableDashedLine(10f, 5f, 0f); //设置折线为虚线
//set1.enableDashedHighlightLine(10f, 5f, 0f);
//set1.setCircleColor(Color.BLUE);   //设置圆圈颜色
set1.setLineWidth(2f);     //设置线条宽度
//set1.setCircleRadius(3f);   //设置眼圈直径
//set1.setDrawCircleHole(true);  //设置圆圈空心
set1.setValueTextSize(9f);
set1.setDrawFilled(true);  //设置绘制阴影区域
set1.setFormLineWidth(1f);
set1.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f));
set1.setFormSize(15f);

//设置阴影区域的颜色值
if (Build.VERSION.SDK_INT >= 18) {
Drawable drawable = ContextCompat.getDrawable(context, fadeDrawableId);
set1.setFillDrawable(drawable);
} else {
set1.setFillColor(Color.BLUE);
}

ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(set1);

LineData data = new LineData(dataSets);

lineChart.setData(data);
}
}

/**
* 初始化表格
* @param lineChart 表格
* @param maxRange  Y轴最大显示数值
* @param minRange  Y轴最小显示数值
* @param b         是否绘制Y轴Label
* @param drawValue 是否绘制Y轴value
*/
public static void initLineChart(Context context,LineChart lineChart, float maxRange, int minRange, boolean b,boolean drawValue) {
lineChart.setDrawGridBackground(false); //是否绘制表格背景
lineChart.setTouchEnabled(true); //设置触摸
lineChart.setDragEnabled(false); //设置课拖动
lineChart.setScaleEnabled(false); //设置可缩放
lineChart.setPinchZoom(false);  //设置中心缩放
lineChart.getDescription().setEnabled(false); //数据描述

lineChart.setNoDataText("没有数据");
/*lineChart.setNoDataTextColor(Color.RED);*/

//设置一个MarkView,该View继承于MarkView
CustomMarkerView mv = new CustomMarkerView(context, R.layout.layout_custom_marker_view);
mv.setChartView(lineChart);
lineChart.setMarker(mv);

//设置Y轴相关数据
lineChart.getAxisRight().setEnabled(false); //隐藏Y轴右边的轴线
YAxis leftAxis = lineChart.getAxisLeft();
leftAxis.removeAllLimitLines();
leftAxis.setAxisMaximum(maxRange);  //设置最大数值范围
leftAxis.setAxisMinimum(minRange);    //设置最小数值范围
leftAxis.setDrawAxisLine(false); //不绘制轴线
leftAxis.setDrawLabels(b);
leftAxis.setValueFormatter(new CustomYValueFormatter(drawValue));
leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART); //设置Y轴Label的位置
leftAxis.setDrawGridLines(false);

//设置X轴相关数据
XAxis xAxis = lineChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//xAxis.setGridColor(android.R.color.transparent); //设置X轴线为透明
xAxis.setDrawGridLines(false); //不绘制X轴
xAxis.setTextSize(9);

lineChart.animateXY(1500, 1500);  //设置图表动画
lineChart.getLegend().setEnabled(false); //不显示表名
}

/**
* 初始化表格
* @param lineChart 表格
* @param maxRange  Y轴最大显示数值
* @param minRange  Y轴最小显示数值
* @param b         是否绘制Y轴Label
*/
public static void initLineChart(Context context,LineChart lineChart, int maxRange, int minRange, boolean b) {
lineChart.setDrawGridBackground(false); //是否绘制表格背景
lineChart.setTouchEnabled(true); //设置触摸
lineChart.setDragEnabled(false); //设置课拖动
lineChart.setScaleEnabled(false); //设置可缩放
lineChart.setPinchZoom(false);  //设置中心缩放
lineChart.getDescription().setEnabled(false); //数据描述

lineChart.setNoDataText("没有数据");
/*lineChart.setNoDataTextColor(Color.RED);*/

//设置一个MarkView,该View继承于MarkView
CustomMarkerView mv = new CustomMarkerView(context, R.layout.layout_custom_marker_view);
mv.setChartView(lineChart);
lineChart.setMarker(mv);

//设置Y轴相关数据
lineChart.getAxisRight().setEnabled(false); //隐藏Y轴右边的轴线
YAxis leftAxis = lineChart.getAxisLeft();
leftAxis.removeAllLimitLines();
leftAxis.setAxisMaximum(maxRange);  //设置最大数值范围
leftAxis.setAxisMinimum(minRange);    //设置最小数值范围
leftAxis.setDrawAxisLine(false); //不绘制轴线
leftAxis.setDrawLabels(b);
leftAxis.setValueFormatter(new CustomYValueFormatter(b));
leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART); //设置Y轴Label的位置
leftAxis.setDrawGridLines(false);

//设置X轴相关数据
XAxis xAxis = lineChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//xAxis.setGridColor(android.R.color.transparent); //设置X轴线为透明
xAxis.setDrawGridLines(false); //不绘制X轴
xAxis.setTextSize(9);

lineChart.animateXY(1500, 1500);  //设置图表动画
lineChart.getLegend().setEnabled(false); //不显示表名
}

/**
* 设置图表数据的方法 多个数据组
* @param lineChart 要设置数据的图表
* @param formData1  表格的Y轴数据1
* @param formData2  表格的Y轴数据2
* @param mode      线条形状
* @param fadeDrawableId 阴影区渐变色的Drawable文件id
*/
public static void setLineData(Context context,LineChart lineChart, List<Float>  formData1,List<Float>  formData2,LineDataSet.Mode mode,int fadeDrawableId) {

//根据Y轴数据产生表格数据
ArrayList<Entry> values1 = new ArrayList<>();
for (int i = 0; i < formData1.size(); i++) {
values1.add(new Entry(i,formData1.get(i)));
}

ArrayList<Entry> values2 = new ArrayList<>();
for (int i = 0; i < formData2.size(); i++) {
values2.add(new Entry(i,formData2.get(i)));
}

LineDataSet set1,set2;
if (lineChart.getData() != null &&
lineChart.getData().getDataSetCount() > 0) {
set1 = (LineDataSet) lineChart.getData().getDataSetByIndex(0);
set2 = (LineDataSet) lineChart.getData().getDataSetByIndex(1);
set1.setValues(values1);
set2.setValues(values2);
lineChart.getData().notifyDataChanged();
lineChart.notifyDataSetChanged();
} else {

set1 = new LineDataSet(values1, "悠唐数据报表");
set1.setDrawValues(false); //不显示数值
set1.setDrawCircles(true); //数值不以原点显示
set1.setMode(mode); //设置线条的形状
//set1.enableDashedLine(10f, 5f, 0f); //设置折线为虚线
//set1.enableDashedHighlightLine(10f, 5f, 0f);
set1.setCircleColor(Color.parseColor("#6666ff"));   //设置圆圈颜色
set1.setColor(Color.parseColor("#6666ff"));
set1.setLineWidth(2f);     //设置线条宽度
set1.setCircleRadius(3f);   //设置眼圈直径
set1.setDrawCircleHole(false);  //设置圆圈空心
set1.setValueTextSize(9f);
set1.setDrawFilled(true);  //设置绘制阴影区域
set1.setFormLineWidth(1f);
set1.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f));
set1.setFormSize(15.f);

set2 = new LineDataSet(values2, "悠唐数据报表");
set2.setCircleColor(Color.parseColor("#ff7d00"));
set2.setDrawCircleHole(false);
set2.setCircleRadius(3f);
set2.setColor(Color.parseColor("#ff7d00"));
set2.setDrawValues(false); //不显示数值
set2.setDrawCircles(true); //数值不以原点显示
set2.setMode(mode); //设置线条的形状
set2.setLineWidth(2f);     //设置线条宽度
set2.setValueTextSize(9f);
set2.setDrawFilled(true);  //设置绘制阴影区域
set2.setFormLineWidth(1f);
set2.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f));
set2.setFormSize(15.f);

//设置阴影区域的颜色值
if (Build.VERSION.SDK_INT >= 18) {
Drawable drawable = ContextCompat.getDrawable(context, fadeDrawableId);
set1.setFillDrawable(drawable);
set2.setFillDrawable(drawable);
} else {
set1.setFillColor(Color.BLUE);
set2.setFillColor(Color.BLUE);
}

LineData data = new LineData(set1,set2);
lineChart.setData(data);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: