图表控件库 MPAndroidChart 的使用
使用方法
- 项目源码地址,包含了很多类型的图标 https://github.com/PhilJay/MPAndroidChart.git
-
在build.gradle的dependencies节点中加入如下代码
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.github.PhilJay:MPAndroidChart:v3.0.2' }
-
跟目录的build.gradle的repositories节点中加入如下代码
maven { url 'https://maven.google.com' }
示例
柱状图
效果图
-
在XML中加入如下代码
<com.github.mikephil.charting.charts.BarChart android:id="@+id/chart_there" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="20dp" android:layout_marginRight="20dp" android:layout_marginLeft="20dp" android:background="@color/white" />
-
柱状图自定义颜色的替换
/** * @param mBarChart 柱状图颜色的替换 */ public void afa(BarChart mBarChart){ BarChartShapeRender renderer = new BarChartShapeRender(mBarChart, mBarChart.getAnimator(), mBarChart.getViewPortHandler()); //柱状图颜色 renderer.setBarDrawable(getResources().getDrawable(R.drawable.shape_bar_chart)); //点击后的颜色,Y超过20000的颜色 renderer.setWarnBarDrawable(20000,getResources().getDrawable(R.drawable.shape_bar_common)); mBarChart.setRenderer(renderer); }
-
主要代码以及数据的设置
public static void drawOne(BarChart mBarChart_One){ ArrayList<String> mlist=new ArrayList<String>(); Random random = new Random(); //模拟数据,X数据 ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>(); for (int i = 0; i < 7; i++) {//添加数据源 yVals1.add(new BarEntry( i+1,random.nextInt(25000))); } mBarChart_One.setTouchEnabled(true);//是否可点击 mBarChart_One.setDrawBarShadow(false);//表不要阴影 mBarChart_One.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry e, Highlight h) { Log.e("---->",e.getX()+" "+e.getY()); } @Override public void onNothingSelected() { } }); mBarChart_One.setDrawValueAboveBar(true);//true文字绘画在bar上 Description description=new Description(); description.setText(""); mBarChart_One.getDescription().setEnabled(false); mBarChart_One.setDescription(description); //表的描述信息 mBarChart_One.setPinchZoom(false);//false只能单轴缩放 mBarChart_One.setMaxVisibleValueCount(31); //最大显示的个数。超过60个将不再显示 mBarChart_One.setScaleEnabled(false); //禁止缩放 mBarChart_One.setDragEnabled(true);// 是否可以拖拽 mBarChart_One.setHighlightPerDragEnabled(true);// 拖拽超过图标绘制画布时高亮显示 mBarChart_One.setDrawGridBackground(false); // 是否显示表格颜色 mBarChart_One.setGridBackgroundColor(Color.RED); // 表格的的颜色 mBarChart_One.zoom(1f,1f,0,0);//设置x,y缩放比例 //X轴 样式 final XAxis xAxis = mBarChart_One.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setLabelRotationAngle(60);//柱的下面描述文字 旋转90度 xAxis.setDrawLabels(true); xAxis.setDrawGridLines(false); xAxis.setGranularity(20f);//设置最小间隔,防止当放大时,出现重复标签。 xAxis.setCenterAxisLabels(true);//字体下面的标签 显示在每个直方图的中间 xAxis.setLabelCount(8,true);//一个界面显示10个Lable。那么这里要设置11个 xAxis.setTextSize(8f); mBarChart_One.getAxisRight().setEnabled(false);//右侧不显示Y轴 mBarChart_One.getAxisLeft().setAxisMinValue(0.0f);//设置Y轴显示最小值,不然0下面会有空隙 mBarChart_One.getAxisLeft().setDrawGridLines(true);//不设置Y轴网格 mBarChart_One.getAxisLeft().setTextSize(8f); //.设置比例图标的显示隐藏 Legend l = mBarChart_One.getLegend(); l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); l.setOrientation(Legend.LegendOrientation.HORIZONTAL); l.setDrawInside(false); //样式 l.setForm(Legend.LegendForm.CIRCLE); //字体 l.setFormSize(10f); //大小 l.setTextSize(13f); l.setFormToTextSpace(10f); l.setXEntrySpace(10f); //模拟数据,Y数据 for(int i=1;i<=yVals1.size();i++) { mlist.add("10/0"+i); } IAxisValueFormatter ix=new MyXAxisValueFormatter1(mlist); mBarChart_One.getXAxis().setValueFormatter(ix); //设置左上方的色块和文字 BarDataSet set1; = new BarDataSet(yVals1, "未达标 已达标"); set1.setValueTextSize(8f); int [] ff=new int[2]; ff[0]=App.getAppContext().getResources().getColor(R.color.blues); ff[1]=App.getAppContext().getResources().getColor(R.color.To_be_evaluated); set1.setColors(ff); ArrayList<IBarDataSet> dataSets = new ArrayList<>(); dataSets.add(set1); BarData data = new BarData(dataSets); data.setValueTextSize(10f); data.setBarWidth(0.3f); mBarChart_One.setData(data); }
-
基本属性介绍
//设置背景颜色 mBarChart.setBackgroundColor(getResources().getColor(R.color.colorAccent)); //设置数值选择的监听 mBarChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry e, Highlight h) { } @Override public void onNothingSelected() { } }); //设置高亮显示 mBarChart.setHighlightFullBarEnabled(true); mBarChart.setDrawValueAboveBar(true); //设置支持触控 mBarChart.setTouchEnabled(true); //设置是否支持拖拽 mBarChart.setDragEnabled(true); //设置能否缩放 mBarChart.setScaleEnabled(true); //设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放 mBarChart.setPinchZoom(true); //获取图表右下角的描述性文字,setEnable()默认为true mBarChart.getDescription().setEnabled(true); Description description=new Description(); description.setText("description"); //设置右下角的描述文字 mBarChart.setDescription(description); //设置阴影 mBarChart.setDrawBarShadow(false); //设置所有的数值在图形的上面,而不是图形上 mBarChart.setDrawValueAboveBar(true); //设置最大的能够在图表上显示数字的图数 mBarChart.setMaxVisibleValueCount(60); //设置背景是否网格显示 mBarChart.setDrawGridBackground(false); //X轴的数据格式 IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(mChart); //得到X轴,设置X轴的样式 XAxis xAxis = mChart.getXAxis(); //设置位置 xAxis.setPosition(XAxisPosition.BOTTOM); //设置特定的标签类型 xAxis.setTypeface(mTfLight); //设置是否绘制网格线 xAxis.setDrawGridLines(false); //设置最小的区间,避免标签的迅速增多 xAxis.setGranularity(1f); // only intervals of 1 day //设置进入时的标签数量 xAxis.setLabelCount(7); //设置数据格式 xAxis.setValueFormatter(xAxisFormatter); IAxisValueFormatter custom = new MyAxisValueFormatter(); YAxis leftAxis = mChart.getAxisLeft(); leftAxis.setTypeface(mTfLight); leftAxis.setLabelCount(8, false); leftAxis.setValueFormatter(custom); leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART); //Sets the top axis space in percent of the full range. Default 10f leftAxis.setSpaceTop(15f); //设置Y轴最小的值 leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true) YAxis rightAxis = mChart.getAxisRight(); rightAxis.setDrawGridLines(false); rightAxis.setTypeface(mTfLight); rightAxis.setLabelCount(8, false); rightAxis.setValueFormatter(custom); rightAxis.setSpaceTop(15f); rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true) //设置图例样式,默认可以显示,设置setEnabled(false);可以不绘制 Legend l = mChart.getLegend(); l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); l.setOrientation(Legend.LegendOrientation.HORIZONTAL); l.setDrawInside(false); l.setForm(LegendForm.SQUARE); l.setFormSize(9f); l.setTextSize(11f); l.setXEntrySpace(4f); //设置X轴和Y轴显示的刻度 private void setData(int count, float range) { float start = 1f; ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>(); for (int i = (int) start; i < start + count + 1; i++) { float mult = (range + 1); float val = (float) (Math.random() * mult); yVals1.add(new BarEntry(i, val)); } BarDataSet set1; if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0); set1.setValues(yVals1); mChart.getData().notifyDataChanged(); mChart.notifyDataSetChanged(); } else { set1 = new BarDataSet(yVals1, "The year 2017"); set1.setColors(ColorTemplate.MATERIAL_COLORS); ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>(); dataSets.add(set1); BarData data = new BarData(dataSets); data.setValueTextSize(10f); data.setValueTypeface(mTfLight); data.setBarWidth(0.9f); mChart.setData(data); } }
-
基本属性
//设置背景颜色 mBarChart.setBackgroundColor(getResources().getColor(R.color.colorAccent)); //BarChart的点击事件 mBarChart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); //设置数值选择的监听 mBarChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry e, Highlight h) { } @Override public void onNothingSelected() { } }); //设置高亮显示 mBarChart.setHighlightFullBarEnabled(true); mBarChart.setDrawValueAboveBar(true); //设置支持触控 mBarChart.setTouchEnabled(true); //设置是否支持拖拽 mBarChart.setDragEnabled(true); //设置能否缩放 mBarChart.setScaleEnabled(true); //设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放 mBarChart.setPinchZoom(true); //获取图表右下角的描述性文字,setEnable()默认为true mBarChart.getDescription().setEnabled(true); Description description=new Description(); description.setText("description"); //设置右下角的描述文字 mBarChart.setDescription(description); //设置阴影 mBarChart.setDrawBarShadow(false); //设置所有的数值在图形的上面,而不是图形上 mBarChart.setDrawValueAboveBar(true); //设置最大的能够在图表上显示数字的图数 mBarChart.setMaxVisibleValueCount(60); //设置背景是否网格显示 mBarChart.setDrawGridBackground(false); //X轴的数据格式 IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(mChart); //得到X轴,设置X轴的样式 XAxis xAxis = mChart.getXAxis(); //设置位置 xAxis.setPosition(XAxisPosition.BOTTOM); //设置特定的标签类型 xAxis.setTypeface(mTfLight); //设置是否绘制网格线 xAxis.setDrawGridLines(false); //设置最小的区间,避免标签的迅速增多 xAxis.setGranularity(1f); // only intervals of 1 day //设置进入时的标签数量 xAxis.setLabelCount(7); //设置数据格式 xAxis.setValueFormatter(xAxisFormatter); IAxisValueFormatter custom = new MyAxisValueFormatter(); YAxis leftAxis = mChart.getAxisLeft(); leftAxis.setTypeface(mTfLight); leftAxis.setLabelCount(8, false); leftAxis.setValueFormatter(custom); leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART); //Sets the top axis space in percent of the full range. Default 10f leftAxis.setSpaceTop(15f); //设置Y轴最小的值 leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true) YAxis rightAxis = mChart.getAxisRight(); rightAxis.setDrawGridLines(false); rightAxis.setTypeface(mTfLight); rightAxis.setLabelCount(8, false); rightAxis.setValueFormatter(custom); rightAxis.setSpaceTop(15f); rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true) //设置图例样式,默认可以显示,设置setEnabled(false);可以不绘制 Legend l = mChart.getLegend(); l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); l.setOrientation(Legend.LegendOrientation.HORIZONTAL); l.setDrawInside(false); l.setForm(LegendForm.SQUARE); l.setFormSize(9f); l.setTextSize(11f); l.setXEntrySpace(4f); //设置X轴和Y轴显示的刻度 private void setData(int count, float range) { float start = 1f; ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>(); for (int i = (int) start; i < start + count + 1; i++) { float mult = (range + 1); float val = (float) (Math.random() * mult); yVals1.add(new BarEntry(i, val)); } BarDataSet set1; if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0); set1.setValues(yVals1); mChart.getData().notifyDataChanged(); mChart.notifyDataSetChanged(); } else { set1 = new BarDataSet(yVals1, "The year 2017"); set1.setColors(ColorTemplate.MATERIAL_COLORS); ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>(); dataSets.add(set1); BarData data = new BarData(dataSets); data.setValueTextSize(10f); data.setValueTypeface(mTfLight); data.setBarWidth(0.9f); mChart.setData(data); } }
折线图
效果图
-
在XML中加入如下代码
<com.github.mikephil.charting.charts.LineChart android:id="@+id/chart" android:layout_width="match_parent" android:layout_height="200dp" />
-
主要代码以及数据的设置
xVals = new ArrayList<>(); yVals = new ArrayList<>(); random = new Random();//产生随机数字 for(int i = 0 ; i<12; i++) { float x = random.nextInt(10000);//获取value值 yVals.add(new Entry(x, i));//创建Entry并且添加到Y值的list中,Y轴的值,一个entry代表一个显示的值 xVals.add( (i+1) + "月");//横坐标显示xxx月 } dataSet = new LineDataSet(yVals, "金额");//创建数据集并设置标签 dataSet.setColors(ColorTemplate.COLORFUL_COLORS);//设置数据集显示的颜色,预支颜色模版ColorTemplate,也可以设置单一颜色和colors dataSet.setHighlightEnabled(true);//设置高亮 dataSet.setValueTextColor(Color.BLUE);//设置Value值的显示文字颜色,字体大小和字体种类,这里我没有添加对应字体可以自己修改 dataSet.setValueTextSize(10.0f); dataSet.setValueTypeface(null); data = new LineData(xVals, dataSet);//创建LineData,x轴List和Y轴数据集为参数 chart.setData(data);//给图表添加数据 chart.setDescription("收支状态");//设置图表描述的内容位置,字体等等 chart.setDescriptionColor(Color.YELLOW); chart.setDescriptionTextSize(15f); chart.setDescriptionPosition(540, 40); chart.getXAxis().setPosition(XAxisPosition.BOTTOM);//设置X轴的显示位置,通过XAxisPosition枚举类型来设置 chart.getXAxis().setAxisMinValue(0.0f);//设置X轴的最小值 chart.getAxisRight().setEnabled(false);//关闭右边的Y轴,因为默认有两条,左边一条,右边一条,MPAndroidChart中有 setEnabled方法的元素基本上都是使能的作用 chart.animateY(3000);//动画效果,MPAndroidChart中还有很多动画效果可以挖掘 //当值被选中的时候,执行操作显示一个Toast chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry e, int dataSetIndex, Highlight h) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, String.valueOf(e.getVal()), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected() { // TODO Auto-generated method stub } });
-
基本属性
//创建描述信息 Description description =new Description(); description.setText("测试图表"); description.setTextColor(Color.RED); description.setTextSize(20); lineChart.setDescription(description);//设置图表描述信息 lineChart.setNoDataText("没有数据熬");//没有数据时显示的文字 lineChart.setNoDataTextColor(Color.BLUE);//没有数据时显示文字的颜色 lineChart.setDrawGridBackground(false);//chart 绘图区后面的背景矩形将绘制 lineChart.setDrawBorders(false);//禁止绘制图表边框的线 //lineChart.setBorderColor(); //设置 chart 边框线的颜色。 //lineChart.setBorderWidth(); //设置 chart 边界线的宽度,单位 dp。 //lineChart.setLogEnabled(true);//打印日志 //lineChart.notifyDataSetChanged();//刷新数据 //lineChart.invalidate();//重绘 //获取此图表的x轴,设置x轴效果 XAxis xAxis = lineChart.getXAxis(); xAxis.setEnabled(true);//设置轴启用或禁用 如果禁用以下的设置全部不生效 xAxis.setDrawAxisLine(true);//是否绘制轴线 xAxis.setDrawGridLines(true);//设置x轴上每个点对应的线 xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴的显示位置 //xAxis.setTextSize(20f);//设置字体 //xAxis.setTextColor(Color.BLACK);//设置字体颜色 //设置竖线的显示样式为虚线 //lineLength控制虚线段的长度 //spaceLength控制线之间的空间 xAxis.enableGridDashedLine(10f, 10f, 0f); //xAxis.setAxisMinimum(0f);//设置x轴的最小值 // xAxis.setAxisMaximum(10f);//设置最大值 xAxis.setAvoidFirstLastClipping(true);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘 xAxis.setLabelRotationAngle(10f);//设置x轴标签的旋转角度 // 设置x轴显示标签数量 还有一个重载方法第二个参数为布尔值强制设置数量 如果启用会导致绘制点出现偏差 // xAxis.setLabelCount(10); // xAxis.setTextColor(Color.BLUE);//设置轴标签的颜色 // xAxis.setTextSize(24f);//设置轴标签的大小 // xAxis.setGridLineWidth(10f);//设置竖线大小 // xAxis.setGridColor(Color.RED);//设置竖线颜色 // xAxis.setAxisLineColor(Color.GREEN);//设置x轴线颜色 // xAxis.setAxisLineWidth(5f);//设置x轴线宽度 // xAxis.setValueFormatter();//格式化x轴标签显示字符 /** * Y轴默认显示左右两个轴线 */ //获取右边的轴线 YAxis rightAxis=lineChart.getAxisRight(); //设置图表右边的y轴禁用 rightAxis.setEnabled(false); //获取左边的轴线 YAxis leftAxis = lineChart.getAxisLeft(); //设置网格线为虚线效果 leftAxis.enableGridDashedLine(10f, 10f, 0f); //是否绘制0所在的网格线 leftAxis.setDrawZeroLine(false); //设置与图表交互 lineChart.setTouchEnabled(true); // 设置是否可以触摸 lineChart.setDragEnabled(true);// 是否可以拖拽 lineChart.setScaleEnabled(false);// 是否可以缩放 x和y轴, 默认是true lineChart.setScaleXEnabled(true); //是否可以缩放 仅x轴 lineChart.setScaleYEnabled(true); //是否可以缩放 仅y轴 lineChart.setPinchZoom(true); //设置x轴和y轴能否同时缩放。默认是否 lineChart.setDoubleTapToZoomEnabled(true);//设置是否可以通过双击屏幕放大图表。默认是true lineChart.setHighlightPerDragEnabled(true);//能否拖拽高亮线(数据点与坐标的提示线),默认是true lineChart.setDragDecelerationEnabled(true);//拖拽滚动时,手放开是否会持续滚动,默认是true(false是拖到哪是哪,true拖拽之后还会有缓冲) lineChart.setDragDecelerationFrictionCoef(0.99f);//与上面那个属性配合,持续滚动时的速度快慢,[0,1) 0代表立即停止。
饼状图
效果图
-
在XML中加入如下代码
<com.github.mikephil.charting.charts.PieChart android:id="@+id/chart1" android:layout_width="match_parent" android:layout_height="300dp" />
-
主要代码以及数据的设置
public class HalfPieChartActivity extends DemoBase { private PieChart mChart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_piechart_half); mChart = (PieChart) findViewById(R.id.chart1); mChart.setBackgroundColor(Color.WHITE); moveOffScreen(); mChart.setUsePercentValues(true); mChart.getDescription().setEnabled(false); mChart.setCenterTextTypeface(mTfLight); mChart.setCenterText(generateCenterSpannableText()); mChart.setDrawHoleEnabled(true); mChart.setHoleColor(Color.WHITE); mChart.setTransparentCircleColor(Color.WHITE); mChart.setTransparentCircleAlpha(110); mChart.setHoleRadius(58f); mChart.setTransparentCircleRadius(61f); mChart.setDrawCenterText(true); mChart.setRotationEnabled(false); mChart.setHighlightPerTapEnabled(true); mChart.setMaxAngle(360f); // HALF CHART mChart.setRotationAngle(180f); mChart.setCenterTextOffset(0, -20); setData(4, 100); mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad); Legend l = mChart.getLegend(); l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); l.setOrientation(Legend.LegendOrientation.HORIZONTAL); l.setDrawInside(false); l.setXEntrySpace(7f); l.setYEntrySpace(0f); l.setYOffset(0f); // entry label styling mChart.setEntryLabelColor(Color.WHITE); mChart.setEntryLabelTypeface(mTfRegular); mChart.setEntryLabelTextSize(12f); } private void setData(int count, float range) { ArrayList<PieEntry> values = new ArrayList<PieEntry>(); for (int i = 0; i < count; i++) { values.add(new PieEntry((float) ((Math.random() * range) + range / 5), mParties[i % mParties.length])); } PieDataSet dataSet = new PieDataSet(values, "Election Results"); dataSet.setSliceSpace(3f); dataSet.setSelectionShift(5f); dataSet.setColors(ColorTemplate.MATERIAL_COLORS); //dataSet.setSelectionShift(0f); PieData data = new PieData(dataSet); data.setValueFormatter(new PercentFormatter()); data.setValueTextSize(11f); data.setValueTextColor(Color.WHITE); data.setValueTypeface(mTfLight); mChart.setData(data); mChart.invalidate(); } private SpannableString generateCenterSpannableText() { SpannableString s = new SpannableString("MPAndroidChart\ndeveloped by Philipp Jahoda"); s.setSpan(new RelativeSizeSpan(1.7f), 0, 14, 0); s.setSpan(new StyleSpan(Typeface.NORMAL), 14, s.length() - 15, 0); s.setSpan(new ForegroundColorSpan(Color.GRAY), 14, s.length() - 15, 0); s.setSpan(new RelativeSizeSpan(.8f), 14, s.length() - 15, 0); s.setSpan(new StyleSpan(Typeface.ITALIC), s.length() - 14, s.length(), 0); s.setSpan(new ForegroundColorSpan(ColorTemplate.getHoloBlue()), s.length() - 14, s.length(), 0); return s; } private void moveOffScreen() { Display display = getWindowManager().getDefaultDisplay(); int height = display.getHeight(); // deprecated int offset = (int)(height * 0.65); /* percent to move */ RelativeLayout.LayoutParams rlParams = (RelativeLayout.LayoutParams)mChart.getLayoutParams(); rlParams.setMargins(0, 0, 0, -offset); mChart.setLayoutParams(rlParams); } }
-
基本属性
// 设置 pieChart 图表基本属性 mChart.setUsePercentValues(false); //使用百分比显示 mChart.getDescription().setEnabled(false); //设置pieChart图表的描述 mChart.setBackgroundColor(Color.YELLOW); //设置pieChart图表背景色 mChart.setExtraOffsets(5, 10, 60, 10); //设置pieChart图表上下左右的偏移,类似于外边距 mChart.setDragDecelerationFrictionCoef(0.95f);//设置pieChart图表转动阻力摩擦系数[0,1] mChart.setRotationAngle(0); //设置pieChart图表起始角度 mChart.setRotationEnabled(true); //设置pieChart图表是否可以手动旋转 mChart.setHighlightPerTapEnabled(true); //设置piecahrt图表点击Item高亮是否可用 mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);// 设置pieChart图表展示动画效果 // 设置 pieChart 图表Item文本属性 mChart.setDrawEntryLabels(true); //设置pieChart是否只显示饼图上百分比不显示文字(true:下面属性才有效果) mChart.setEntryLabelColor(Color.WHITE); //设置pieChart图表文本字体颜色 mChart.setEntryLabelTypeface(mTfRegular); //设置pieChart图表文本字体样式 mChart.setEntryLabelTextSize(10f); //设置pieChart图表文本字体大小 // 设置 pieChart 内部圆环属性 mChart.setDrawHoleEnabled(true); //是否显示PieChart内部圆环(true:下面属性才有意义) mChart.setHoleRadius(28f); //设置PieChart内部圆的半径(这里设置28.0f) mChart.setTransparentCircleRadius(31f); //设置PieChart内部透明圆的半径(这里设置31.0f) mChart.setTransparentCircleColor(Color.BLACK);//设置PieChart内部透明圆与内部圆间距(31f-28f)填充颜色 mChart.setTransparentCircleAlpha(50); //设置PieChart内部透明圆与内部圆间距(31f-28f)透明度[0~255]数值越小越透明 mChart.setHoleColor(Color.WHITE); //设置PieChart内部圆的颜色 mChart.setDrawCenterText(true); //是否绘制PieChart内部中心文本(true:下面属性才有意义) mChart.setCenterTextTypeface(mTfLight); //设置PieChart内部圆文字的字体样式 mChart.setCenterText("Test"); //设置PieChart内部圆文字的内容 mChart.setCenterTextSize(10f); //设置PieChart内部圆文字的大小 mChart.setCenterTextColor(Color.RED); //设置PieChart内部圆文字的颜色 // pieChart添加数据 setData(); // 获取pieCahrt图列 Legend l = mChart.getLegend(); l.setEnabled(true); //是否启用图列(true:下面属性才有意义) l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); l.setOrientation(Legend.LegendOrientation.VERTICAL); l.setForm(Legend.LegendForm.DEFAULT); //设置图例的形状 l.setFormSize(10); //设置图例的大小 l.setFormToTextSpace(10f); //设置每个图例实体中标签和形状之间的间距 l.setDrawInside(false); l.setWordWrapEnabled(true); //设置图列换行(注意使用影响性能,仅适用legend位于图表下面) l.setXEntrySpace(10f); //设置图例实体之间延X轴的间距(setOrientation = HORIZONTAL有效) l.setYEntrySpace(8f); //设置图例实体之间延Y轴的间距(setOrientation = VERTICAL 有效) l.setYOffset(0f); //设置比例块Y轴偏移量 l.setTextSize(14f); //设置图例标签文本的大小 l.setTextColor(Color.parseColor("#ff9933"));//设置图例标签文本的颜色 //pieChart 选择监听 mChart.setOnChartValueSelectedListener(this); //设置MARKERVIEW CustomMarkerView mv = new CustomMarkerView(this, new PercentFormatter()); mv.setChartView(mChart); mChart.setMarker(mv); /** * 设置饼图的数据 */ private void setData() { ArrayList<PieEntry> pieEntryList = new ArrayList<PieEntry>(); ArrayList<Integer> colors = new ArrayList<Integer>(); colors.add(Color.parseColor("#f17548")); colors.add(Color.parseColor("#FF9933")); //饼图实体 PieEntry PieEntry CashBalance = new PieEntry(70, "现金余额 1500"); PieEntry ConsumptionBalance = new PieEntry(30, "消费余额 768"); pieEntryList.add(CashBalance); pieEntryList.add(ConsumptionBalance); //饼状图数据集 PieDataSet PieDataSet pieDataSet = new PieDataSet(pieEntryList, "资产总览"); pieDataSet.setSliceSpace(3f); //设置饼状Item之间的间隙 pieDataSet.setSelectionShift(10f); //设置饼状Item被选中时变化的距离 pieDataSet.setColors(colors); //为DataSet中的数据匹配上颜色集(饼图Item颜色) //最终数据 PieData PieData pieData = new PieData(pieDataSet); pieData.setDrawValues(true); //设置是否显示数据实体(百分比,true:以下属性才有意义) pieData.setValueTextColor(Color.BLUE); //设置所有DataSet内数据实体(百分比)的文本颜色 pieData.setValueTextSize(12f); //设置所有DataSet内数据实体(百分比)的文本字体大小 pieData.setValueTypeface(mTfLight); //设置所有DataSet内数据实体(百分比)的文本字体样式 pieData.setValueFormatter(new PercentFormatter());//设置所有DataSet内数据实体(百分比)的文本字体格式 mChart.setData(pieData); mChart.highlightValues(null); mChart.invalidate(); //将图表重绘以显示设置的属性和数据 }