![](/img/trans.png)
[英]Android: Override onDraw() or run() in order to draw on Canvas
[英]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.