Android中对HelloCharts的修改,实现动态绘制折线图

s 近期的项目中涉及到了相关图标的绘制,选择了第三方的开源图标库—HelloCharts。由于项目需求需要动态绘制折线图,所以对该开源框架的折线图部分进行了相关的修改。实现了以下功能:1.动态绘制折线图 2. 可实现折线图的上的点有多种颜色 3. 静态绘制折线图表时,可以在折线的最后一个点上进行不一样的标注。
先展示一下效果吧:
1.动态绘制折线图:

2.可设置折线图上的点有多种颜色:

3.标注【这里是作者自己用代码硬写上去的,没有进行适配等】

下面开始简单的说一下改动的地方。
1.动态绘制折线图:

    /**
     * 这个是模拟实时获取数据的一个计时器,大家可以根据实际情况修改
     */
    private void showChangeLineChart() {
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if(!isFinish){
                    //实时添加新的点
                    pointValueList.add(points.get(position));
                    float x = points.get(position).getX();
                    //根据新的点的集合画出新的线
                    Line line = new Line(pointValueList);
                    line.setColor(Color.DKGRAY);
                    line.setShape(ValueShape.CIRCLE);
                    line.setCubic(true);//曲线是否平滑,即是曲线还是折线

                    linesList.add(line);
                    lineChartData = initDatas(linesList);
                    lineChartView.setLineChartData(lineChartData);
                    //g根据点的横坐标世事变幻坐标的视图范围
                    Viewport port;
                    if(x > 50){
                        port = initViewPort(x-50,x);
                    }
                    else {
                        port = initViewPort(0,50);
                    }
                    lineChartView.setMaximumViewport(port);
                    lineChartView.setCurrentViewport(port);

                    position++;
                    if(position > points.size()-1){
                        isFinish = true;
                    }
                }
            }
        },1000,1000);
    }

2.设置折线图上的点有多种颜色:

    //首先 修改hellocharts源代码的PointValue这个实体类添加属性pointColor
     public PointValue(float x, float y, int pointColor) {
        set(x,y);
        this.pointColor = pointColor;
    }
    //在hellocharts源代码的renderer包下的 LineChartRenderer类的drawPoints方法中修改
    private void drawPoints(Canvas canvas, Line line, int lineIndex, int mode) {
        /*********************************************/
//        pointPaint.setColor(line.getPointColor());
        /*********************************************/
        int valueIndex = 0;
        for (PointValue pointValue : line.getValues()) {
            /*********************************************/
            if(pointValue.getPointColor() == 0){
                pointPaint.setColor(line.getPointColor());
            }else {
                pointPaint.setColor(pointValue.getPointColor());
            }
            /*********************************************/
            .....
       }
       //这样就可以调用PointValue新的构造函数,给点赋值别的颜色

3.标注:

//首先 修改hellocharts源代码的PointValue这个实体类添加属性isFinish , int score
 public PointValue(float x, float y, int pointColor,boolean isFinish , int score) {
        set(x,y);
        this.pointColor = pointColor;
        this.isFinish = isFinish;
        this.score = score;
    }

//在hellocharts源代码的renderer包下的 LineChartRenderer类的drawPoints方法中修改
      if(pointValue.isFinish()){
                        //画线,参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint 画刷对象。
//                        drawLine(float startX, float startY, float stopX, float stopY, Paintpaint);
                        float y = pointValue.getY();
                        int color;
                        color = Color.parseColor("#00ba84");
                        Paint paint = new Paint();
                        paint.setStrokeWidth(5);
                        paint.setColor(color);
                        canvas.drawLine(rawX, rawY - 10,rawX+20,rawY - 50,paint);
                        paint.setTextSize(40f);
                        canvas.drawText(pointValue.getScore()+"",rawX-2 ,rawY - 64,paint);
                        paint.setStyle(Paint.Style.STROKE);
                        canvas.drawCircle(rawX+20,rawY - 80,30,paint);
                    }

//这样就可以调用PointValue新的构造函数,实现标注
最后附上我的源码和Demo

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Android,有多种方法可以实现绘制折线图的功能。一种常用的方法是使用第三方库,如MPAndroidChart、XCL-chart、achartenginee和hellochart等。这些库提供了丰富的功能和易于使用的API,可以帮助开发者快速实现折线图绘制。[2] 如果你想使用hellochart库来实现折线图,首先需要在布局文件添加一个LineChartView组件。在activity_*.xml文件,可以添加以下代码来创建LineChartView组件: ```xml <lecho.lib.hellocharts.view.LineChartView android:id="@id/line_chart" android:padding="30dp" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff"/> ``` 接下来,你需要在相应的Activity创建自定义View,并在其实现折线图绘制逻辑。你可以参考hellochart库的文档和示例代码,了解如何使用该库来绘制折线图。[3] 另外,如果你对自定义View有一定的了解,也可以自己实现折线图绘制逻辑。你可以通过绘制线条、绘制圆点和绘制阴影等操作来实现折线图的效果。在绘制之前,你可以先观察效果图,确定画布的底层背景、网格背景、折线和圆点的绘制顺序,以及阴影部分的绘制方式。然后,你可以在自定义View重写onDraw方法,使用Canvas和Paint等类来实现折线图绘制逻辑。[1] 总之,无论是使用第三方库还是自定义View,都可以实现Android绘制折线图的功能。选择合适的方法取决于你的需求和个人偏好。希望这些信息对你有帮助!
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值