MPAndroidChart---LineChart折线图

 和之前的一样,注释都在代码里

public class LineChartUtils  {
    private static final String TAG = "LineChartUtils";
    private final FormatUtils formatUtils;
    private LineChart lineChart;
    private Handler mHandler = new Handler();
    private Context mContext;
    Runnable hideHighLight = new Runnable() {
        @Override
        public void run() {
        lineChart.highlightValue(null);
        }
    };

    public LineChartUtils(LineChart lineChart,Context context){
        this.lineChart = lineChart;
        this.mContext = context;
        formatUtils = new FormatUtils();
        initSetting();
    }

    /**
     * 常用设置
     */
    private void initSetting() {
        lineChart.getDescription().setText("");
        lineChart.getDescription().setTextColor(Color.RED);
        lineChart.getDescription().setTextSize(16);//设置描述的文字 ,颜色 大小
        lineChart.setNoDataText("无数据噢"); //没数据的时候显示
        lineChart.setDrawBorders(false);//是否显示边框
        lineChart.animateX(500);//x轴动画
        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代表立即停止

        //通过选中监听,来实现不点击图表后3秒,定位线自动消失
        lineChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry e, Highlight h) {
                mHandler.removeCallbacks(hideHighLight);
                mHandler.postDelayed(hideHighLight,3000);
            }

            @Override
            public void onNothingSelected() {

            }
        });

        //设置markerview
        MyMarkerView myMarkerView=new MyMarkerView(mContext, R.layout.custom_marker_view);
        myMarkerView.setChartView(lineChart);
        lineChart.setMarker(myMarkerView);

        //设置X轴
        XAxis xAxis = lineChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴位置
        xAxis.setAxisMinimum(1);//设置x轴最小
//        xAxis.setAxisMaximum(12);//设置x轴最大值
        xAxis.setTextSize(14);
        xAxis.setTextColor(Color.RED);
        xAxis.setEnabled(true);//是否显示x轴是否禁用
        xAxis.setDrawLabels(true); //设置x轴标签 即x轴上显示的数值
        xAxis.setDrawGridLines(true);//是否设置x轴上每个点对应的线 即 竖向的网格线
        xAxis.enableGridDashedLine(2,2,2); //竖线 虚线样式  lineLength控制虚线段的长度 spaceLength控制线之间的空间
        xAxis.setLabelRotationAngle(30f);//设置x轴标签的旋转角度
        xAxis.setValueFormatter(new IAxisValueFormatter() { //设置x轴文字样式
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                //x轴上显示时间
                String numInt = formatUtils.getCurrentMinute();
                return numInt;

            }
        });

        //设置Y轴
        YAxis yAxisLef = lineChart.getAxisLeft();
        yAxisLef.setTextSize(14);
        yAxisLef.setAxisMinimum(0);
        YAxis yAxisRight = lineChart.getAxisRight();//获取右侧y轴
        yAxisRight.setEnabled(false);//设置是否禁止
    }

    public void setLineChartData(List<Entry> yValue){
        LineDataSet lineDataSet = new LineDataSet(yValue,"股票走势折线");
        lineDataSet.setHighLightColor(Color.RED); //设置高亮线的颜色
        lineDataSet.setColor(Color.BLACK);//设置折线颜色
        lineDataSet.setCircleColor(Color.BLUE);//设置交点的圆圈的颜色
        lineDataSet.setDrawCircles(false);//设置是否显示交点
        lineDataSet.setDrawValues(true); //设置是否显示交点处的数值
        lineDataSet.setValueTextColor(Color.RED); //设置交点上值的颜色
        lineDataSet.setValueTextSize(14);//设置交点上值的字体大小
//        lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);// 设置平滑曲线

        //设置折线上显示数据的格式
        lineDataSet.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                String numOfTwo = formatUtils.getNumOfTwo(value);
                return numOfTwo;
            }
        });
        LineData lineData = new LineData(lineDataSet);
        lineChart.setData(lineData);
    }

    class MyMarkerView extends MarkerView{
        TextView marker_view_tv;
        public MyMarkerView(Context context, int layoutResource) {
            super(context, layoutResource);
            marker_view_tv = (TextView) findViewById(R.id.marker_view_tv);

        }

        //获取最新点击坐标点的值的回调
        @Override
        public void refreshContent(Entry e, Highlight highlight) {
            String val = e.getY()+"\n"+e.getX();
            marker_view_tv.setText(val);
            super.refreshContent(e, highlight);
        }

        @Override
        public MPPointF getOffsetForDrawingAtPoint(float posX, float posY) {
            return super.getOffsetForDrawingAtPoint(posX, posY);
        }

        //设置显示的偏移量,显示在定位线的正上方
        @Override
        public MPPointF getOffset() {
            int measuredHeight = marker_view_tv.getMeasuredHeight();
            int measuredWidth = marker_view_tv.getMeasuredWidth();
            return new MPPointF(-measuredWidth/2,-measuredHeight);
        }
    }
}

Activity中使用的时候

@Override
    public void initData() {
        ArrayList<Entry> entries = new ArrayList<Entry>();
        Random random = new Random(10);
        for (int i =1;i<20;i++){
            float v = random.nextFloat();
            entries.add(new Entry(i,v));
        }
        lineChartUtils.setLineChartData(entries);
    }

猜你喜欢

转载自my.oschina.net/fbf8866/blog/1812164
今日推荐