自定义View-轻量级柱状图、饼图、折线图

来源:互联网 发布:r语言导入csv数据 编辑:程序博客网 时间:2024/05/18 02:43

项目地址:
https://github.com/jigongdajiang/GjgChart
文章思路:
1.截图加解释
2.使用及实例代码
3.内部实现解析(自己看源码,有注释)

1.截图加解释

柱状图
效果说明:设置好数据后柱子慢慢升起,拖动滚动条柱子高度自动变化,顶部文字跟着移动

折线图
效果说明:可以左右滑动,自动匹配数据集到图形,支持X轴标签选中及选中后的回调

饼状图
效果说明:进入是饼图旋转,点击某个色块能谈起,支持点击回调

2.使用及实例代码

(1)柱状图的使用

//这里有些数据直接写死在View中了,使用时可对应修改也可将一些参数提供setXXX方法进行设置//准备饼设置每个柱子对应的数据的转换率histogramView.initData(new float[]{0.08f, 0.07f, 0.06f, 0.05f});//开启动画升起柱子histogramView.start(2);@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {    tv_money.setText(String.valueOf(1000 + progress * ((500000 - 1000) / seekBar.getMax())));    //根据滑动百分比改变柱子高度    histogramView.changeProgress(progress);}

(2)折线图的使用

private void refreshDataMouth() {    //准备X轴的数据    List<String> xValues = new ArrayList<>();    for (int i = 0; i < 12; i++) {        xValues.add((i + 1) + "月");    }    //准备折线数据集合    List<LineData> lineDatas = new ArrayList<>();    LineData lineData1 = new LineData();    lineData1.setLineColor(Color.parseColor("#FF4657"));    List<Float> lineData1Values = new ArrayList<>();    for(int i = 0;i<xValues.size();i++){        if(i<2){            lineData1Values.add(0.0f);        }else{            Random r = new Random();            Float z = r.nextFloat() * 100;            lineData1Values.add(z);        }    }    lineData1.setLineValues(lineData1Values);    lineDatas.add(lineData1);    //......这里主要是制造假数据,真实数据模仿封装    //设置折线数据    try {        lineChart.setDataResource(xValues,lineDatas,8);        //设置监听        lineChart.setOnTabSelectedListener(new LineChartView.onTabSelectedListener() {        @Override        public void onTabSelected(int position, String xValue, List<Float> yData) {            To    } catch (Exception e) {        e.printStackTrace();    }}

(3)饼状图使用

//初始化颜色集合colors = new ArrayList<>();colors.add(android.R.color.holo_blue_light);colors.add(android.R.color.holo_green_light);colors.add(android.R.color.holo_red_light);colors.add(android.R.color.holo_purple);//准备数据集合values = new ArrayList<>();random = new Random();values.add(random.nextDouble()*100);values.add(random.nextDouble()*100);values.add(random.nextDouble()*100);values.add(random.nextDouble()*100);//设置数据和颜色集合piechart.setDatas(values,colors);//设置监听piechart.setOnItemChangedListener(new PieChartView.OnItemChangedListener() {                    @Override                    public void onItemChanged(int index, double value) {                        txtData.setText("index: " +index+ " value: "+value );                    }                });
原创粉丝点击