0

对于我正在开发的应用程序,我想绘制计步器的结果。计步器使用 aservice来测量某人在后台所走的步数。我有一个名为 DrawView 的自定义视图,我想在其中绘制我的结果。service每当测量一步时,我都会从我的 drawPoint 方法中调用。然后从我的 drawPoint 方法中,我尝试onDraw()使用invalidate(). 根据我的日志,正在调用 drawPoint 但onDraw()不是。所以我的问题是:

为什么 onDraw() 没有被调用,我应该如何让 DrawView 调用它?


public class DrawView extends View {

...

@Override
public void onDraw(Canvas canvas) {
    for (Point point : points) {
        canvas.drawCircle(point.x, point.y, 5, paint);
        Log.d("Checks", "onDraw is called");
    }
}

public void drawPoint(int counter) {
    Log.d("Checks", "Point coordinates: " + 40 + ", " + counter);

    Point point = new Point();
    point.y = 40;
    point.x = counter;
    points.add(point);
    invalidate();
}
}
4

2 回答 2

1

而是直接从服务调用 view.drawPoint(),使用处理程序来更新 ui。

从后台服务检查链接 更新 ui

于 2013-07-04T12:54:55.440 回答
0

必须从 UI 线程调用 invalidate()。尝试调用 postInvalidate() 代替。

http://developer.android.com/reference/android/view/View.html#invalidate()

于 2013-07-04T12:48:16.303 回答