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日

悬赏问题

  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'