如何在android java中使用Canvas onDraw()绘制导航路径

如何在android java中使用Canvas onDraw()绘制导航路径,java,android,Java,Android,我是java绘图新手,我想实现一个导航系统,这样用户可以在地图上导航。java函数“onDraw”是实现的,因此它可以显示用户在地图上的位置,也可以显示他的移动。以下是我的代码: class CanvasView extends View { private Paint paint = new Paint(); private Path path = new Path(); private float lineX = Position.x_axis

我是java绘图新手,我想实现一个导航系统,这样用户可以在地图上导航。java函数“onDraw”是实现的,因此它可以显示用户在地图上的位置,也可以显示他的移动。以下是我的代码:

class CanvasView extends View {
        private Paint paint = new Paint();
        private Path path = new Path();
        private float lineX = Position.x_axis;
        private float lineY = Position.y_axis;
        private float lastX = Position.x_axis;
        private float lastY = Position.y_axis;

        public CanvasView(Context context) {
            super(context);
            paint.setAntiAlias(true);
            paint.setStrokeWidth(10f);
            paint.setColor(Color.BLACK);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeJoin(Paint.Join.ROUND);

        }

        @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);
            drawRotateImage(canvas);
            canvas.drawPoint(Position.x_axis, Position.y_axis, paint);

            Path path = new Path();
            path.moveTo(lastX, lastY);
            path.lineTo(lineX,lineY);
            canvas.drawPath(path, paint);
        }

        private void stepDetector (float step) {
            stepCount += (int) step;
            distance = stepCount * 30;
            lineX = (float) (lineX + 30);
            lineY = (float) (lineY + 30);
            invalidate();
            lastX = lineX;
            lastY = lineY;
        }
}
每次检测到一个步骤时都会调用stepdetector,它应该重新绘制画布以显示移动。注意,前面的移动线需要是可见的,也就是说,它应该是一条连续的线

我在获取导航线路路径时遇到问题。如果我能得到一些帮助,我将不胜感激


提前感谢。

onDraw每次都会绘制内容的新副本,并且不会保留旧信息。对于您试图绘制的内容,您可以保留一个类型为
Position
的列表,并在调用
stepDetector
时将新位置添加到列表中


然后,在onDraw中,迭代列表并绘制连接列表中所有点的线。

尝试此操作,制作列表并为每个步骤添加点,然后在onDraw中从列表中绘制所有点

class CanvasView extends View {
        List<Point> points;
        private Paint paint = new Paint();
        private Path path = new Path();
        private float lineX = Position.x_axis;
        private float lineY = Position.y_axis;
        private float lastX = Position.x_axis;
        private float lastY = Position.y_axis;

        public CanvasView(Context context) {
            super(context);
            paint.setAntiAlias(true);
            paint.setStrokeWidth(10f);
            paint.setColor(Color.BLACK);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeJoin(Paint.Join.ROUND);
            points=new ArrayList<>();

        }

        @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);
            drawRotateImage(canvas);
            canvas.drawPoint(Position.x_axis, Position.y_axis, paint);
            // now here draw all points from list
            Path path = new Path();
            path.moveTo(lastX, lastY);
            path.lineTo(lineX,lineY);
            canvas.drawPath(path, paint);
        }

        private void stepDetector (float step) {
            stepCount += (int) step;
            distance = stepCount * 30;
            lineX = (float) (lineX + 30);
            lineY = (float) (lineY + 30);
            invalidate();
            lastX = lineX;
            lastY = lineY;
            // add every point to the list after step
        }

class Point{
float x,y;     

Hello am项目``drawRotateImage(画布);画布绘制点(Position.x_轴、Position.y_轴、绘制);canvas.save();画布。旋转(方向梯度、lastX、lastY);canvas.restore();对于(行l:listLine){canvas.drawLine(l.StartX,l.StartY,l.EndX,l.EndY,paint);}``我还需要捕获用户的旋转。我正在使用canvas.rotate和orientationgree作为参数,但我看不到正在旋转的线。有什么建议吗。
 }