如何在setContentView(R.layout.main)之后调用onDraw?

时间:2012-03-29 18:28:47

标签: android

我有一些在运行时绘制的东西。我在MyView类中绘制了onDraw。 因为,我已经在onCreate中使用了setContentView(R.layout.main),我再也无法使用它了。
如何在setContentView(R.layout.main)之后调用onDraw?

public class MyActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); // I have something to draw in XML also.
        MyView myView = new MyView(this);
        // setContentView(myView); I cannot use setContentView two times.
}
protected class MyView extends View {
    public MyView(Context context) {
        super(context);
    }
    public void onDraw(Canvas canvas) {
           // there are some drawing codes and these cannot be done in XML.
    }
}

3 个答案:

答案 0 :(得分:2)

我看到两种方式

1: 您可以将myView(实例)添加到R.layout.main

中定义的ViewGroup

2: 您可以直接在XML R.layout.main中添加使用MyView。 而不是“LinearLayout”等,你是完全限定的类名

请参阅http://developer.android.com/guide/topics/ui/custom-components.html(在底部)

答案 1 :(得分:1)

你不应该自己调用onDraw()。相反,要强制重绘,请拨打invalidate()

  

如果视图可见,onDraw(android.graphics.Canvas)将是   在未来的某个时刻召集。

答案 2 :(得分:0)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.activity_main);

    MakeView makeView = new MakeView(this);

    relativeLayout.addView(makeView);
    relativeLayout.invalidate();
}

我注意到在addView之后调用了onDraw。