簡體   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