Android统计图的绘制( MPChartLib 的使用)

最近一直在研究Android 图形块的内容,绘制统计图肯定是要去学的;在自己写之前,首先要借鉴下别人写的;先学学别人的;我把对MPChartLib 的使用总结一下;

先上效果图
这里写图片描述

统计图我们大可以从2点来思考:

a、坐标轴

b、数据

现在来分别看一下

1、柱形统计图

返回 条形统计图需要展示的数据;这个可以自己选择;

 /**
     *
     * @return 折线统计图的数据
     */
    public  LineData getLineData( ){
        // 股票数据
        Stock mStock= AssetsManger.readAssertToObject("json/fenshidata.json", Stock.class,this);
        ArrayList<Entry>mEntry=new ArrayList<>();
        for(int i=0;i<mStock.getData().size();i++){
            Stock.DataBean dataBean=mStock.getData().get(i);
            Entry entry=new Entry(i, (float) dataBean.getNow());
            mEntry.add(i,entry);
        }
        LineDataSet mLineDataSet=new LineDataSet(mEntry,mStock.getName());
        mLineDataSet.setLineWidth(1);
        mLineDataSet.setDrawCircleHole(false);
        mLineDataSet.setDrawCircles(false);
        mLineDataSet.setDrawFilled(false);
        mLineDataSet.setDrawValues(true);
        mLineDataSet.setDrawHighlightIndicators(false);    mLineDataSet.setColors(ColorTemplate.VORDIPLOM_COLORS);
        LineData mLineData=new LineData();
        mLineData.addDataSet(mLineDataSet);
        return  mLineData;

    }

在view 中显示 有数据的条形统计图 ,在这里所有统计图的显示都采用以下方法;在这里 第一个参数 是:
BarLineChartBase lineChartBase: BarLineChartBase是barchart、linechart、candle chart。。的父类,也就是说你可以传入 条形统计图barchart,烛形统计图:candle chart…..
第二参数:要和你传入的显示图对应;BarLineScatterCandleBubbleData data ,也就是说,条形统计图就放条行统计图的数据

    /**
     *   
     * @param lineChartBase   barchart、linechart、candle chart。。的父类
     * @param data     线性表的 数据
     */
    public void showChart(BarLineChartBase lineChartBase, BarLineScatterCandleBubbleData data){
        mContainer.removeAllViews();
        mContainer.addView(lineChartBase);
        FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
         ViewGroup.LayoutParams.MATCH_PARENT);
        lineChartBase.setLayoutParams(params);


        lineChartBase.setData(data);
        lineChartBase.setDoubleTapToZoomEnabled(false);
        lineChartBase.setBackgroundColor(Color.argb(12,12,22,22));
       //横坐标
        XAxis xAxis= lineChartBase.getXAxis();
        xAxis.setDrawAxisLine(false);
        xAxis.setCenterAxisLabels(false);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);

        xAxis.setValueFormatter(new AxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {

                return value+"";
            }

            @Override
            public int getDecimalDigits() {
                return 0;
            }
        });

        xAxis.setDrawAxisLine(false);
        xAxis.setDrawGridLines(false);
        xAxis.setDrawLabels(false);
        //左纵坐标
        YAxis yAxisL=lineChartBase.getAxisLeft();
       yAxisL.setDrawAxisLine(false);
        yAxisL.setDrawGridLines(false);
        //右纵坐标
        YAxis yAxisR=lineChartBase.getAxisRight();
        yAxisR.setDrawGridLines(false);



        lineChartBase.setGridBackgroundColor(Color.argb(12,123,12,33));
        lineChartBase.setDrawGridBackground(true);
        lineChartBase.animateX(2500);
    }

显示在视图中:

BarChart mChart=new BarChart(this);
showChart(mChart,getBarData());

2、折线统计图

数据:
     /**
     *
     * @return 折线统计图的数据
     */
    public  LineData getLineData( ){
        // 股票数据
        Stock mStock= AssetsManger.readAssertToObject("json/fenshidata.json", Stock.class,this);
        ArrayList<Entry>mEntry=new ArrayList<>();
        for(int i=0;i<mStock.getData().size();i++){
            Stock.DataBean dataBean=mStock.getData().get(i);
            Entry entry=new Entry(i, (float) dataBean.getNow());
            mEntry.add(i,entry);
        }
        LineDataSet mLineDataSet=new LineDataSet(mEntry,mStock.getName());
        mLineDataSet.setLineWidth(1);
        mLineDataSet.setDrawCircleHole(false);
        mLineDataSet.setDrawCircles(false);
        mLineDataSet.setDrawFilled(false);
        mLineDataSet.setDrawValues(true);
        mLineDataSet.setDrawHighlightIndicators(false);

         mLineDataSet.setColors(ColorTemplate.VORDIPLOM_COLORS);
        LineData mLineData=new LineData();
        mLineData.addDataSet(mLineDataSet);
        return  mLineData;

    }
显示:
 mChart=new LineChart(this);
 showChart(mChart,getLineData());

3、烛形统计图

数据
/**
     * 返回烛形图 数据
     * @return
     */
    public CandleData getCandleData(){
        // 股票数据
        CandleStock mStock=AssetsManger.
                readAssertToObject("json/marketcandle.json", CandleStock.class,this);
        ArrayList<CandleEntry> candleEntrys=new ArrayList<>();
        for (int i=0;i<mStock.getData().size();i++){

            CandleStock.DataBean databean=mStock.getData().get(i);

            CandleEntry entry=new CandleEntry(i,
                    (float) databean.getHigh(),
                    (float)databean.getLow(),
                    (float)databean.getOpen(),
                    (float)databean.getNow());
             candleEntrys.add(entry);

        }

        ArrayList<CandleEntry> yVals1 = new ArrayList<CandleEntry>();

        for (int i = 0; i < 20; i++) {
            //float mult = (mSeekBarY.get + 1);
          float val = (float) (Math.random() * 40) + 20;

          float high = (float) (Math.random() * 9) + 8f;
          float low = (float) (Math.random() * 9) + 8f;

         float open = (float) (Math.random() * 6) + 1f;
        float close = (float) (Math.random() * 6) + 1f;

          boolean even = i % 2 == 0;

            yVals1.add(new CandleEntry(i, val + high, val - low, even ? val + open : val - open,
                    even ? val - close : val + close));
        }



        CandleDataSet candledataset=new   CandleDataSet(yVals1,mStock.getName());     candledataset.setAxisDependency(YAxis.AxisDependency.LEFT);

        candledataset.setBarSpace(1f);
        candledataset.setDecreasingColor(Color.BLUE);
        candledataset.setShadowWidth(12f);
        candledataset.setShowCandleBar(true);

        candledataset.setAxisDependency(YAxis.AxisDependency.LEFT);
       //candledataset.setShadowColor(Color.BLACK);
        candledataset.setShadowColorSameAsCandle(true);
        candledataset.setShadowWidth(0.7f);
        candledataset.setDecreasingColor(Color.GREEN);
        candledataset.setDecreasingPaintStyle(Paint.Style.FILL);
        candledataset.setIncreasingColor(Color.RED);
        candledataset.setIncreasingPaintStyle(Paint.Style.FILL);


        candledataset.setColors(ColorTemplate.LIBERTY_COLORS);


        CandleData candleData=new CandleData();
        candleData.addDataSet(candledataset);

        return  candleData;


    }
显示
CandleStickChart mChart=new CandleStickChart(this);
  showChart(mChart,getCandleData());

4、组合统计图

数据
/**
     * 返回组合图 数据
     */
    public CombinedData getCombinedData(){

        CombinedData data=new CombinedData();
        data.setData(getCandleData());
        data.setData(getLineData());
        data.setData(getBarData());
        return data;
    }
显示
CombinedChart mChart=new CombinedChart(this);
 showChart(mChart,getCombinedData());

总结

MPChartLib的使用很简单,主要是写这个库的思想,将数据、显示、彻底的分开,两者互不影响,同时整体我感觉过于庞大繁琐,如果直接拿来用放到自己的app中,免不了有些浪费空间;如果自己需要的话,还是在这个上面抽出自己有用的就好了,其他都可以舍弃掉;
对我来说,学到不少,往后我要努力尝试自己写一个;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值