MPAndroidChart的LineChart的使用

来源:互联网 发布:淘宝美工都需要做什么 编辑:程序博客网 时间:2024/04/30 00:25

最近开发用到图表,如果简单使用建议使用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);                        }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.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);            }
阅读全文
0 0