繁体   English   中英

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

[英]How to draw a navigation path using Canvas onDraw() in android java

我是 java 绘图的新手,我想实现一个导航系统,以便用户可以在 map 上导航。 java function 'onDraw' 已实现,因此它在 map 上显示用户的位置并显示他的动作。 以下是我的代码:

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,它应该重新绘制 canvas 以显示运动。 注意之前的移动线需要是可见的,也就是说它应该是一条连续的线。

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

先感谢您。

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

然后,在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;     

}

 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM