MPAndroidChart使用小结

* 注意:*测试版本:com.github.PhilJay:MPAndroidChart:v3.0.2

1.linechart使用

设置:

  chart.setDescription(null);//去除Description
        chart.setDragEnabled(true);//设置可以拖动
        chart.setDragDecelerationEnabled(true);//拖动减速
        chart.setDoubleTapToZoomEnabled(false);//取消双击缩放
        chart.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.appbgcolor));//背景颜色
        chart.setScaleYEnabled(false);//1取消y轴缩放
        chart.setDragDecelerationFrictionCoef(0.9f);//拖动降速速率

        chart.getAxisRight().setEnabled(false);//取消右边y轴
        chart.getAxisLeft().setTextSize(10);//y轴字体大小
        chart.getAxisLeft().setMinWidth(0f);//左边y轴最小值
        chart.getAxisLeft().setAxisLineColor(Color.parseColor("#00ffffff"));//y轴线颜色
        chart.getAxisLeft().setGridColor(Color.parseColor("#06253a"));//网格颜色
        chart.getAxisLeft().setTextColor(Color.parseColor("#65859a"));//y轴字体颜色
        chart.getAxisLeft().setDrawLimitLinesBehindData(true);//设置限制线

        chart.getXAxis().setTextColor(Color.parseColor("#65859a"));//x轴字体颜色
        chart.getXAxis().setAxisLineWidth(0);//x轴线宽度
        chart.getXAxis().setDrawGridLines(false);//取消x轴网格
        chart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴在底部显示
        chart.getXAxis().setTextSize(10);//x轴字体大小
        chart.getXAxis().setCenterAxisLabels(false);//使x轴显示文字居中
        chart.getXAxis().setGranularityEnabled(false);//x轴文字单个显示
        chart.getXAxis().setAxisLineColor(Color.parseColor("#00ffffff"));//x轴线颜色
        chart.getXAxis().setYOffset(0);//x轴偏移量

        chart.getLegend().setEnabled(false);

添加数据:

 private void initChartData(LineChart chart) {
        //每个点的坐标,自己随便搞点(x,y)坐标就可以了
        List<Entry> pointValues = new ArrayList<>();
        for (int i = 1; i < 19; i++) {
            int y = (int) (Math.random() * 20);
            pointValues.add(new Entry(i, y));

        }

        //点构成的某条线
        LineDataSet lineDataSet = new LineDataSet(pointValues, "");
        //设置该线的颜色
        lineDataSet.setColor(Color.parseColor("#5dbcfe"));

        //设置该线的宽度
        lineDataSet.setLineWidth(1f);
        //设置每个坐标点的圆大小
        lineDataSet.setCircleRadius(4f);
        //设置不能选中 flase
        lineDataSet.setHighlightEnabled(true);
        //设置是否画圆
        lineDataSet.setDrawCircles(true);
        //高亮颜色
        lineDataSet.setHighLightColor(Color.parseColor("#005dbcfe"));
        //中心圆半径
        lineDataSet.setCircleHoleRadius(2);
        //中心圆颜色
        lineDataSet.setCircleColorHole(ContextCompat.getColor(activity, R.color.appbgcolor));
        //圆圈颜色
        lineDataSet.setCircleColor(Color.parseColor("#5bbcff"));
        // 设置平滑曲线模式
        //  lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        //设置线一面部分是否填充颜色
        lineDataSet.setDrawFilled(true);
        if (Build.VERSION.SDK_INT >= 18) {
            lineDataSet.setFillDrawable(ContextCompat.getDrawable(activity, R.drawable.shape_mianchart_filldrawable));
        } else {
            //设置填充的颜色
            lineDataSet.setFillColor(Color.parseColor("#445dbcfe"));
        }
        //设置是否显示点的坐标值
        lineDataSet.setDrawValues(false);
        lineDataSet.setValueTextColor(Color.parseColor("#5abdfe"));

        //线的集合(可单条或多条线)
        List<ILineDataSet> dataSets = new ArrayList<>();
        dataSets.add(lineDataSet);
        //把要画的所有线(线的集合)添加到LineData里
        LineData lineData = new LineData(dataSets);
        //把最终的数据setData
        chart.setData(lineData);

    }

2.barchart使用:

设置:

        animateY(1000);
        animateX(1000);



        setDescription(null);//去除Description
        setDragEnabled(true);//设置可以拖动
        setDragDecelerationEnabled(true);//拖动减速
        setDoubleTapToZoomEnabled(false);//取消双击缩放
        setBackgroundColor(ContextCompat.getColor(getContext(), R.color.appbgcolor));//背景颜色
        setScaleYEnabled(false);//1取消y轴缩放
        setDragDecelerationFrictionCoef(0.9f);//拖动降速速率
        getAxisRight().setEnabled(false);//取消右边y轴

        getAxisLeft().setTextSize(10);//y轴字体大小
        getAxisLeft().setMinWidth(0f);//左边y轴最小值
        getAxisLeft().setAxisLineColor(Color.parseColor("#00ffffff"));//y轴线颜色
        getAxisLeft().setGridColor(Color.parseColor("#0b3652"));//网格颜色
        getAxisLeft().setTextColor(Color.parseColor("#65859a"));//y轴字体颜色
        getAxisLeft().setDrawLimitLinesBehindData(false);//设置限制线


        getXAxis().setTextColor(Color.parseColor("#65859a"));//x轴字体颜色
        getXAxis().setAxisLineWidth(0);//x轴线宽度
        getXAxis().setDrawGridLines(false);//取消x轴网格
        getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴在底部显示
        getXAxis().setTextSize(10);//x轴字体大小
        getXAxis().setAxisLineColor(Color.parseColor("#00ffffff"));//x轴线颜色
       // getXAxis().setYOffset(0);//x轴偏移量
        getXAxis().setGranularity(1f);//显示一个值
      // getXAxis().setAxisMinimum(0);//x轴最小值为0,如果设置为0,就会出现第一条柱形图显示不全
        getXAxis().setAxisMaximum(31);x轴最大值为31
        getXAxis().setCenterAxisLabels(true);//选中标志居中显示
        getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
        getXAxis().setCenterAxisLabels(false);//标签文字显示在直方图中间,会导致文字看起来不居中
      //  getXAxis().setXOffset(0); //设置偏移量
        getXAxis().setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float v, AxisBase axisBase) {
                return (int) v + "";
            }
        });
       // getXAxis().setSpaceMin(100);

        //setBorderWidth(100);


        getLegend().setEnabled(false);//不显示legend

添加数据:


        List<BarEntry> pointValues = new ArrayList<>();
       final ArrayList<String> xVals = new ArrayList<>();//X轴数据

        for (int i = 0; i < 30; i++) {
            xVals.add(i+1+"");
            int y = (int) (Math.random() * 30);
            pointValues.add(new BarEntry(i,y));

        }



        chart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(xVals));//x轴显示



        //点构成的某条线
        BarDataSet barDataSet = new BarDataSet(pointValues, "");

        barDataSet.setAxisDependency(YAxis.AxisDependency.RIGHT);

        //允许选中
        barDataSet.setHighlightEnabled(true);
        //选中颜色
        barDataSet.setHighLightColor(Color.parseColor("#00fffe"));
        //背景颜色
        barDataSet.setBarBorderColor(ContextCompat.getColor(activity, R.color.appbgcolor));
        //设置不显示值
        barDataSet.setDrawValues(false);
        //设置bar颜色
        barDataSet.setColor(Color.parseColor("#00fffe"));
        //线的集合(可单条或多条线)

        List<IBarDataSet> dataSets = new ArrayList<>();
        dataSets.add(barDataSet);

        //把要画的所有线(线的集合)添加到LineData里
        BarData barData = new BarData(dataSets);

        //直方图占空比 0~1
        barData.setBarWidth(0.2f);
        //把最终的数据setData
        chart.setData(barData);

3.一些坑

1.添加均线:


        //设置可用课时
        LimitLine ll1 = new LimitLine(16, "可用");
        ll1.setTextColor(Color.YELLOW);
        ll1.setLabel("可用");
        ll1.setLineWidth(1f);
        ll1.setEnabled(true);
        ll1.setLineColor(Color.YELLOW);
        ll1.enableDashedLine(5f, 10f, 0f);//三个参数,第一个线宽长度,第二个线段之间宽度,第三个一般为0,是个补偿
        ll1.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);//标签位置
        ll1.setTextSize(10f);
        chart.getAxisLeft().addLimitLine(ll1);

        //设置均值
        LimitLine ll2 = new LimitLine(7, "均值");
        ll2.setLabel("均值");
        ll2.setTextColor(Color.parseColor("#5dbcfe"));
        ll2.setLineWidth(1f);
        ll2.setEnabled(true);
        ll2.setLineColor(Color.parseColor("#5dbcfe"));
        ll2.enableDashedLine(5f, 10f, 0f);//三个参数,第一个线宽长度,第二个线段之间宽度,第三个一般为0,是个补偿
        ll2.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_BOTTOM);//标签位置
        ll2.setTextSize(10f);
        chart.getAxisLeft().addLimitLine(ll2);

2.添加点击显示的标签markview

chart.setMarker(new DeviceDataChartMarkView(getContext()));//自定义markview


public class DeviceDataChartMarkView extends MarkerView{
    private TextView tvContent;


    public DeviceDataChartMarkView(Context context) {
        super(context, R.layout.view_devicedata_markview);
        tvContent = (TextView) findViewById(R.id.devicedata_markview_text);
    }


    @Override
    public void refreshContent(Entry e, Highlight highlight) {
        tvContent.setText(""+ FormatUtil.getInt(e.getY()));
        super.refreshContent(e, highlight);
    }

    @Override
    public MPPointF getOffset() {
        return new MPPointF(-(getWidth() / 2), -getHeight());
    }

}

3.添加点击自动居中

 setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry entry, Highlight highlight) {
                centerViewToAnimated(entry.getX(), entry.getY(), YAxis.AxisDependency.RIGHT, 500);//自动居中
            }

            @Override
            public void onNothingSelected() {

            }
        });

4.默认放大指定倍数:

   Matrix m = new Matrix();//放大x轴
        m.postScale(30f / 7f, 1f);//两个参数分别是x,y轴的缩放比例。例如:将x轴的数据放大为之前的1.5倍
        getViewPortHandler().refresh(m, this, false);//将图表动画显示之前进行缩放

5.barchart第一条柱形图显示不全

  getXAxis().setAxisMinimum(0);//x轴最小值为0,如果设置为0,就会从0开始,出现第一条柱形图显示不全

6.与viewpager结合使用滑动图表手势冲突

自定义图表重写onTouchEvent捕捉手势

 @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                getParent().requestDisallowInterceptTouchEvent(false);//这里我们是让getParent()去请求
                startX = (int) event.getX();
                startY = (int) event.getY();

               int per =  getWidth()/4;

                if(startX<per||startX>(getWidth()-per)){//两边范围内运行切换上下页
                    getParent().requestDisallowInterceptTouchEvent(false);
                }else{
                    getParent().requestDisallowInterceptTouchEvent(true);
                }

                break;
            case MotionEvent.ACTION_MOVE:

                break;
            case MotionEvent.ACTION_UP:
                getParent().requestDisallowInterceptTouchEvent(false);
                break;
        }
        return super.onTouchEvent(event);
    }

7.x轴每条数据区会显示多个数值

  getXAxis().setGranularityEnabled(false);
  getXAxis().setGranularity(1f);//显示一个值

8.x轴文字偏移底部距离:

setExtraBottomOffset(10);//底部偏移量

9.x轴文字不居中,会有偏移

 getXAxis().setCenterAxisLabels(false);//如果设置了true,会居中在直方图中间,看起来文字是不居中的

10.代码选中高亮

 mBardChart.highlightValue(position,0);//选中高亮,position:x的下标位置

11.设置轴上显示文字

  chart.getAxisLeft().setValueFormatter(new IAxisValueFormatter() {//设置y轴显示文字
            @Override
            public String getFormattedValue(float v, AxisBase axisBase) {

                return null;
            }
        });
        chart.getXAxis().setValueFormatter(new IAxisValueFormatter() {//设置x轴显示文字
            @Override
            public String getFormattedValue(float v, AxisBase axisBase) {
                return null;
            }
        });

12.添加图表内容区域与四周边界偏移量

 chart.setExtraRightOffset(20);//添加右边偏移量,不然会看不见今天两个字

13.个数少,显示间隔太大

通过添加最大值限制

 chart.getXAxis().setAxisMaximum(7);

14.x轴最右边数值或者文字被遮挡或者不现实

设置最大值为显示个数小一点,比如小0.2:

 chart.getXAxis().setAxisMaximum(count-0.2f);
 chart.getAxisLeft().setAxisMinimum(0f);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MPAndroidChart是一款功能强大的Android图表库,它支持多种类型的图表,如折线图、柱状图、饼图、散点图等,并且可以进行多种自定义设置和交互操作。以下是MPAndroidChart使用详解: 1. 导入库 在项目的build.gradle文件中添加以下依赖: ``` dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } ``` 2. 添加布局 在布局文件中添加一个空的布局,用于显示图表: ``` <LinearLayout android:id="@+id/chart_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" /> ``` 3. 初始化图表 在代码中获取布局并初始化图表: ``` // 获取布局 LinearLayout chartLayout = findViewById(R.id.chart_layout); // 创建图表 LineChart chart = new LineChart(this); // 添加到布局中 chartLayout.addView(chart); ``` 4. 设置数据 设置图表的数据源: ``` List<Entry> entries = new ArrayList<>(); entries.add(new Entry(0, 2)); entries.add(new Entry(1, 4)); entries.add(new Entry(2, 6)); entries.add(new Entry(3, 8)); entries.add(new Entry(4, 10)); LineDataSet dataSet = new LineDataSet(entries, "Label"); LineData lineData = new LineData(dataSet); chart.setData(lineData); ``` 5. 自定义样式 可以对图表进行多种自定义设置,如图例、坐标轴、标签等: ``` // 设置图例 Legend legend = chart.getLegend(); legend.setEnabled(false); // 设置X轴 XAxis xAxis = chart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置Y轴 YAxis yAxis = chart.getAxisLeft(); yAxis.setAxisMinimum(0f); yAxis.setAxisMaximum(12f); yAxis.setGranularity(1f); yAxis.setValueFormatter(new ValueFormatter() { @Override public String getFormattedValue(float value) { return String.valueOf((int) value); } }); // 设置标签 chart.getDescription().setEnabled(false); ``` 6. 添加交互操作 可以为图表添加多种交互操作,如缩放、拖动等: ``` // 缩放 chart.setScaleEnabled(true); chart.setPinchZoom(true); // 拖动 chart.setDragEnabled(true); ``` 以上就是MPAndroidChart使用详解,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值