invalidate()不会调用OnDraw方法

时间:2012-07-30 11:05:34

标签: android ondraw invalidation

invalidate()不记得我的OnDraw()方法。我在invalidate()所在的同一个类中的setter方法中使用OnDraw()

public class PuzzleDraw extends View {

    // defining some variables //

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // codes for painting puzzle //
    }

    public PuzzleDraw(Context context) {
        super(context);
    }

    // Method for giving cursor X/Y from MainActivity OnTouch() method and using it in OnDraw() method in some part of painting code //

    public void setCursor(int i, int j) {
        this.xx = i;
        this.yy = j;
        invalidate();
    } 

当我调试我的代码时,一切都很好,除了在OnDraw()执行时调用invalidate() ... 事实上,invalidate()对我毫无用处! 怎么了? 我也使用了postInvalidate()this.invalidate()this.postInvalidate(),但没有改变。

2 个答案:

答案 0 :(得分:3)

调用invalidate()不会直接执行onDraw,它只会在View类中设置相应的标志。下次遍历视图层次结构时,框架将调用onDraw方法。

答案 1 :(得分:1)

您可能只通过从活动中调用setCursor(float,float)方法一次调用它,但如果您希望框架本身在内部调用onDraw方法,则必须一次又一次地调用invalidate方法。

希望这会起作用