0

invalidate()OnDraw()私の方法を思い出せません。invalidate()同じクラスのセッターメソッドで使用し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()コードをデバッグすると、実行時にRECALLING を除いてすべて問題ありませんinvalidate()...実際、invalidate()何もしていません! なにが問題ですか?postInvalidate()、も使用this.invalidate()this.postInvalidate()ましたが、何も変わりませんでした。

4

2 に答える 2

3

の呼び出しは直接invalidate()実行されず、クラスに適切なフラグを設定するだけです。ビュー階層が次にトラバースされるときに、メソッドがフレームワークによって呼び出されます。onDrawViewonDraw

于 2012-07-30T11:18:33.213 に答える
1

アクティビティから呼び出して setCursor(float, float) メソッドを 1 回だけ呼び出している可能性がありますが、フレームワーク自体によって onDraw メソッドを内部的に呼び出したい場合は、invalidate メソッドを何度も呼び出す必要があります。

これがうまくいくことを願っています

于 2015-10-08T05:09:48.007 に答える