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!
By default all ViewGroup sub-classes do not call their onDraw
method, you should enable it by calling setWillNotDraw(false)
link
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With