weixin_42116431 2023-02-27 16:19 采纳率: 37.5%
浏览 38
已结题

安卓动态绘制曲线不能实时绘制

安卓实现动态绘制曲线,但是最后不能实时绘制。最后退出到手机桌面,然后进入app的时候曲线才绘制,重复退出桌面到进入app,曲线会显示。代码的坐标都是正确的,但是就是不能实时绘制这个问题

img


img

  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-02-27 16:48
    关注

    参考GPT和自己的思路,从您的代码中可以看到,在每次更新数据后,您调用了 toDrawLine(myCanvas) 方法来绘制曲线,但是这个方法里面并没有实时的绘制曲线,而是在 onDraw(Canvas canvas) 方法里面绘制的。因此,每次调用 toDrawLine(myCanvas) 方法后,只是将新的点添加到点列表 xyList 中,而并没有立即绘制曲线。

    当您退出应用程序到桌面,然后再进入应用程序时,onDraw(Canvas canvas) 方法会被调用,此时会绘制出包括最新添加的点在内的所有点的曲线。因此,如果您多次退出应用程序并重新进入,就会看到逐步增加的曲线。

    要实现实时绘制曲线,您需要将 toDrawLine(myCanvas) 方法中的绘制代码移动到 onDraw(Canvas canvas) 方法中,这样每次更新数据时都会立即绘制曲线。

    具体实现方法如下:

    修改 toDrawLine(Canvas canvas) 方法,将绘制代码移到 onDraw(Canvas canvas) 方法中:

    private void toDrawLine(Canvas canvas) {
        if (xyList == null || xyList.size() == 0 || xyList.size() < 3) {
            return;
        }
    
        newPoints = new ArrayList<>();
        newPoints.addAll(xyList);
    
        baseLinePath.moveTo(newPoints.get(newPoints.size() - 2).x, newPoints.get(newPoints.size() - 2).y);
    
        for (int i = newPoints.size() - 2; i < newPoints.size(); i++) {
            if (i >= 0) {
                PointF point = newPoints.get(i);
                baseLinePath.lineTo(point.x, point.y);
            }
        }
    
        mPaint.setColor(Color.parseColor("#FF4F7FFF"));
        canvas.drawPath(baseLinePath, mPaint);
    }
    

    修改 onDraw(Canvas canvas) 方法,调用 toDrawLine(myCanvas) 方法:

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        myCanvas = canvas;
        measure();
        drawBottomLine(myCanvas);
        toDrawLine(myCanvas); // 在每次绘制时调用 toDrawLine 方法
    }
    

    删除 toDrawLine(myCanvas) 方法中已经转移到 onDraw(Canvas canvas) 方法中的绘制代码:

    // 删除以下代码
    // baseLinePath.moveTo(newPoints.get(newPoints.size() - 2).x, newPoints.get(newPoints.size() - 2).y);
    //
    // for (int i = newPoints.size() - 2; i < newPoints.size(); i++) {
    //     if (i >= 0) {
    //         PointF point = newPoints.get(i);
    //         baseLinePath.lineTo(point.x, point.y);
    //     }
    // }
    //
    // mPaint.setColor(Color.parseColor("#FF4F7FFF"));
    // canvas.drawPath(baseLinePath, mPaint);
    

    这样,每次更新数据时都会立即绘制曲线,而不需要退出应用程序到桌面再进入才能看到曲线。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?