2016-09-11 15 views
0

this.invalidateを初めて呼び出すときに、onDraw()というメソッドが2回呼び出される理由を理解できません変数)。その後、ユーザーがボタンを押すたびに、onDraw()が1回呼び出されます。ここでは、コードは次のとおりです。最初に 'invalidate'が呼び出されたときに 'onDraw()'が2回呼び出されました

MyActivity

MyView mCustomView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_interval_identification); 

    mCustomView = (MyView) findViewById(R.id.my_view); 
    Button mButton = (Button) findViewById(R.id.id_btn); 

    mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      newDrawing(); 
     } 
    }); 

    newDrawing(); 

} 

private void newDrawing() { 

    int a; 
    int b; 

    //some operations on 'a' and 'b' 

    mCustomView.newDrawing(a, b); 

} 

MYVIEW

int x; 
int y; 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Drawable object = ContextCompat.getDrawable(getContext(), R.drawable.object); 

    //some operations 

    object.draw(canvas); //based on 'x' and 'y' 
} 

public void newDrawing(int a, int b) { 
    x = a; 
    y = b; 
    this.invalidate(); 
} 

答えて

0

MyActivityであなたのonCreate方法でnewDrawing();newDrawing(); --> //newDrawing();)をコメントにしてください。最初にonDrawが自動的に呼び出されたようです。

+0

動作しません。 'a'と 'b'が設定されていないため、オブジェクトが正しく描画されません。 –

+0

パラメータ 'a'と' b'が 'onDraw'メソッド(既に' boolean'など)で設定されているかどうかを調べることができるので、 'a'、' b'が知られている。 – user35603

+0

しかし、この方法では、ユーザがボタンを押してnewDrawing()が呼び出されるまで、オブジェクトは描画されません。 –

関連する問題