在自定义视图中不调用onDraw()

时间:2013-07-04 12:42:58

标签: android view ondraw

对于我正在开发的应用,我想用计步器绘制结果图。计步器使用service来测量某人在后台执行的步数。我有一个名为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();
}
}

2 个答案:

答案 0 :(得分:1)

而是直接从服务中调用view.drawPoint(),使用handler来更新ui。

检查链接update ui from background service

答案 1 :(得分:0)

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

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