为什么invalidate()之后不调用onDraw?

2024-03-06

我在 stackoverflow 上找到了很多帖子,但仍然无法解决我的问题。这是我的代码片段:

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;
}
}

你能解释一下为什么我按 b1 的前三次没有调用 onDraw 吗?因为我每次按 b1 时都会调用 invalidate。非常感谢!


默认情况下,所有 ViewGroup 子类不会调用它们的onDraw方法,您应该通过调用来启用它setWillNotDraw(false) link http://developer.android.com/reference/android/view/View.html#setWillNotDraw%28boolean%29

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么invalidate()之后不调用onDraw? 的相关文章

随机推荐