MPAndroidChart的LineChart的使用
2017-08-23 19:03
447 查看
最近开发用到图表,如果简单使用建议使用hellocharts,不用自己处理ViewPager中的冲突
如果朋友想使用渐变,这里有Github的一个patch,可以自己去源码中添加
LineChart的github补丁
博主也是渣渣对事件处理不是很清楚,坑了一天,希望大家以后可以有更好的处理方式可以告诉博主 O(∩_∩)O
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: getParent().requestDisallowInterceptTouchEvent(true);//这里我们是让getParent()去请求 startX = (int) event.getX(); startY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: endX = (int) event.getX(); endY = (int) event.getY(); if(Math.abs(endX-startX)>Math.abs(endY - startY)){//左右滑动 XAxis xAxis = getXAxis(); if(endX>startX){//右滑 if((int)getLowestVisibleX() == (int) xAxis.getAxisMinimum()){ //这里我们需要父控件去拦截这个事件,判断是否是我们的第一个页面 getParent().requestDisallowInterceptTouchEvent(false); 4000 }else{ getParent().requestDisallowInterceptTouchEvent(true); } }else{//左滑 //判断是否是我们的11个详情页里面某一个详情页的里面的最后一个页面 if((int)getHighestVisibleX() == (int) xAxis.getAxisMaximum()){ getParent().requestDisallowInterceptTouchEvent(false); }else{ getParent().requestDisallowInterceptTouchEvent(true); } } }else{//上下滑动 getParent().requestDisallowInterceptTouchEvent(false); } break; case MotionEvent.ACTION_UP: getParent().requestDisallowInterceptTouchEvent(false); break; } return super.onTouchEvent(event); }
简单使用
private void showChart() { setLineChartProperties(); setLineChartLegend(); setXAxis(); setYAxis(); setLineData(xListValue.size(),courseList); }
//简单属性的设置 private void setLineChartProperties() { mlinechart.getDescription().setEnabled(false);//设置描述文本不显示 mlinechart.setDrawGridBackground(false);//设置是否显示表格背景 mlinechart.setTouchEnabled(true);//设置是否可以触摸 mlinechart.setDragDecelerationFrictionCoef(0.9f); mlinechart.setDragEnabled(true);//设置是否可以拖拽 mlinechart.setScaleEnabled(false);//设置是否可以缩放 mlinechart.setDrawGridBackground(false); mlinechart.setHighlightPerDragEnabled(true); mlinechart.setPinchZoom(true); mlinechart.setBackgroundColor(Color.parseColor("#F3F3F3")); //mlinechart.setBackgroundColor(Color.LTGRAY);//设置背景颜色 float ratio = (float) xListValue.size()/(float) 10; mlinechart.zoom(ratio,1f,0,0);//显示的时候是按照多大的比率缩放显示 1f表示不放大缩小 //我默认手机屏幕上显示10 剩下的滑动折线图然后显示。。假如要显示25个 那么除以10 就是放大2.5f。。同理 // 56个民族 那么放大5.6f mlinechart.animateX(1500);//设置从X轴出来的动画时间 }
private void setLineChartLegend() { //设置图例 Legend l = mlinechart.getLegend(); l.setForm(Legend.LegendForm.CIRCLE);//设置比例图前面的图标 l.setTextSize(11f); l.setTextColor(Color.BLACK); //设置图例的位置 l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); l.setOrientation(Legend.LegendOrientation.HORIZONTAL); l.setDrawInside(false); }
private void setXAxis() { //自定义设置横坐标 IAxisValueFormatter xValueFormatter = new ExamModelTwoYValueFormatter(xListValue); //X轴 XAxis xAxis = mlinechart.getXAxis(); xAxis.enableGridDashedLine(10f, 10f, 0f); xAxis.setTextSize(11f); xAxis.setTextColor(Color.BLACK); xAxis.setDrawGridLines(false);//设置不从X轴发出横线 xAxis.setDrawAxisLine(true);//设置显示X轴 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置X轴现实的位置 xAxis.setValueFormatter(xValueFormatter);//设置自定义X轴值 //xAxis.setLabelCount(xListValue.size());//设置X轴显示的个数 xAxis.setLabelCount(10);//一个界面显示10个Lable。那么这里要设置11个 xAxis.setGranularity(1f);//设置最小间隔,防止当放大时出现重复标签 xAxis.setLabelRotationAngle(-40f); }
private void setYAxis() { YAxis leftYAxis = mlinechart.getAxisLeft(); leftYAxis.setTextColor(Color.BLACK);//设置左边Y轴的字体颜色 leftYAxis.setTextSize(11f);//设置左边Y轴的字体大小 //leftYAxis.setGridColor(Color.parseColor("#ff8b3d"));设置网格线的颜色 //leftYAxis.setAxisMaximum(1000f);//设置Y轴最大值 leftYAxis.setAxisMinimum(0f);//设置Y轴最小值是0 leftYAxis.setDrawGridLines(true);//设置从Y轴发出横向直线 leftYAxis.setGranularityEnabled(true); leftYAxis.setDrawAxisLine(true);//设置左边Y轴显示 //leftYAxis.setDrawZeroLine(false); YAxis rightYAxis = mlinechart.getAxisRight(); rightYAxis.setEnabled(false);//设置右边Y轴隐藏 }
private int[] mColors = new int[] { Color.parseColor("#FFD700"), Color.parseColor("#FF3E96"), Color.parseColor("#EEEE00"), Color.parseColor("#EE0000"), Color.parseColor("#CD853F"), Color.parseColor("#98F5FF") }; private void setLineData(int size,ArrayList<String> courseList){ mlinechart.resetTracking(); ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>(); for (int z = 0; z < courseList.size(); z++) { ArrayList<Entry> values = new ArrayList<Entry>(); for (int i = 0; i < size; i++) { double val = (Math.random() * size) + 3; values.add(new Entry(i, (float) val)); } //LineDataSet d = new LineDataSet(values, "DataSet " + (z + 1)); LineDataSet set = new LineDataSet(values, courseList.get(z)); set.setLineWidth(2.5f); set.setCircleRadius(4f); int color = mColors[z % mColors.length]; set.setColor(color); set.setCircleColor(color); set.setHighlightEnabled(true);//设置是否显示十字线 // 改变折线样式,用曲线。 set.setMode(LineDataSet.Mode.CUBIC_BEZIER); // 曲线的平滑度 set.setCubicIntensity(0.2f); //设置填充 //set.setDrawFilled(true); //set.setFillAlpha(20); //set.setFillColor(Color.GREEN); //设置背景渐变 /*if (Utils.getSDKInt() >= 18) { // fill drawable only supported on api level 18 and above Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red);//设置渐变 set.setFillDrawable(drawable); } else { set.setFillColor(Color.GREEN); }*/ dataSets.add(set); } // make the first DataSet dashed //((LineDataSet) dataSets.get(0)).enableDashedLine(10, 10, 0); //((LineDataSet) dataSets.get(0)).setColors(ColorTemplate.VORDIPLOM_COLORS); //((LineDataSet) dataSets.get(0)).setCircleColors(ColorTemplate.VORDIPLOM_COLORS); LineData data = new LineData(dataSets); //data.setValueTextColor(Color.BLACK);//设置数据点文字颜色 //data.setValueTextSize(10f);//设置数据点文字大小 data.setDrawValues(true);//设置不显示数据点 mlinechart.setData(data); mlinechart.invalidate(); }
有的朋友可能会用到背景渐变
//设置填充 set.setDrawFilled(true);//设置允许填充 set.setFillAlpha(85); //set 8e10 .setFillColor();//设置填充的颜色 //设置背景渐变 if (Utils.getSDKInt() >= 18) { // fill drawable only supported on api level 18 and above Drawable drawable = ContextCompat.getDrawable(getActivity(), R.drawable.line_chart_gradient);//设置渐变 set.setFillDrawable(drawable); } else { set.setFillColor(Color.RED); }
相关文章推荐
- MPAndroidChart的教程(一) LineChart的使用(by 星空武哥)
- MPAndroidChart之LineChart项目使用心得
- MPAndroidChart之LineChart使用
- 关于 MPAndroidChart 中的 LineChart 的使用小结
- MPAndroidChart使用二之折线图
- MPAndroidChart使用指南(MVP模式)
- MPAndroidChart使用三之柱形图
- MPAndroidChart的使用记录
- MPAndroidChart使用(个人笔记)
- MPAndroidChart之LineChart
- MPAndroidChart使用之HalfPieChart
- MPAndroidChart使用详解
- MPAndroidChart使用之Bar chart
- 解决使用了subList方法之后MPAndroidChart不能显示数据的Bug
- MPAndroidChart之LineChart双线绘制
- Android统计图的绘制( MPChartLib 的使用)
- android使用mpchartlib设置图表
- 三方图表库hellocharts使用简单例子归纳(感觉比MpAndroidchart好用)
- MPAndroidChart使用一之圆饼图
- MPAndroidChart使用之倒包