2012-03-29 91 views
3

我在运行时绘制了一些东西。我在MyView类中绘制了onDraw。 因为,我已经在onCreate中使用了setContentView(R.layout.main),所以我不能再次使用它。
如何在setContentView(R.layout.main)之后调用onDraw?如何在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. 
    } 
} 

回答

2

我看到两种方式

1: 您可以您的MyView的(实例)添加到

2 R.layout.main

定义的ViewGroup中: 你可以直接添加使用MyView的你XML R.layout.main。 相反“的LinearLayout”等等,你完全限定类名

看到http://developer.android.com/guide/topics/ui/custom-components.html(在底部)

+0

我还没有试过。但我认为它会奏效。这就像使用自定义小部件一样。 – user1301568 2012-03-30 15:42:04

1

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

如果视图可见,onDraw(android.graphics.Canvas)将在将来某个时刻调用 。

+0

我叫myView.invalidate(); setContentView(R.layout.main);在onCreate。这是行不通的。我在哪里叫无效? – user1301568 2012-03-30 11:24:34

+0

我想你还没有把你的看法添加到活动中。除非将视图添加到视图层次结构中,否则该活动无法显示视图。根据您的要求,您可能需要将其添加到层次结构中的特定布局。 – 2012-03-30 15:09:58

+0

对。我的问题是如何添加。无论如何谢谢你。 – user1301568 2012-03-30 15:42:57

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

我注意到的onDraw被addView后调用的。