Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why onDraw is not called after invalidate()?

Tags:

android

I have found many posts on stackoverflow but I still cannot solve my problem. Here is my code piece:

public class MyView extends RelativeLayout {  Button b1; Button b2; Context sContext; public static int i = 0; private int w = 400; private int h = 400; private int w2 = 100; private int h2 = 100;  public MyView(Context context) {     super(context);     sContext = context;     init(); }  public MyView(Context context, AttributeSet attrs) {     super(context, attrs);     sContext = context;     init(); }  private void init() {     b1 = new Button(sContext);     addView(b1);     b1.setBackgroundColor(Color.YELLOW);      b1.setOnClickListener(new OnClickListener() {          @Override         public void onClick(View v) {              if (w >= 600) {                 MyView.this.setBackgroundColor(Color.GREEN);                 //b1.setBackgroundColor(Color.RED);             } else {                 MyView.this.setX(100);             }              MyView.this.invalidate();             w += 100;             w2 += 20;         }      }); }  @Override protected void onDraw(Canvas canvas) {     super.onDraw(canvas);     //b1.setBackgroundColor(Color.RED);     Toast.makeText(sContext, ""+i, Toast.LENGTH_SHORT).show();     ++i; } } 

Would you please explain why onDraw is not called the first three times I press b1? Because I called invalidate everytime I press b1. Thank you very much!

like image 699
darklord Avatar asked Jul 11 '13 14:07

darklord


1 Answers

By default all ViewGroup sub-classes do not call their onDraw method, you should enable it by calling setWillNotDraw(false) link

like image 57
Tomas Žemaitis Avatar answered Sep 18 '22 15:09

Tomas Žemaitis