0

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()但没有任何改变。

4

2 回答 2

3

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

于 2012-07-30T11:18:33.213 回答
1

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

希望这会奏效

于 2015-10-08T05:09:48.007 回答