2012-03-29 59 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

XML R.layout.main。 代わりに「のLinearLayout」のというように、あなたの完全修飾クラス名

が(一番下)http://developer.android.com/guide/topics/ui/custom-components.htmlを参照してください

+0

私はまだ試していません。しかし、私はそれが動作すると思います。カスタムウィジェットを使うのと同じです。 – user1301568

1

あなたは自分でonDraw()を呼び出すべきではありません。代わりに、再描画を強制するには、invalidate()を呼び出します。

ビューが表示されている場合、onDraw(android.graphics.Canvas)は、将来のある時点で呼び出さ あろう。 あなたはR.layout.main

2に定義されたのViewGroupにごMYVIEW(インスタンス)を追加できます: あなたが直接あなたに利用MYVIEWを追加することができ、私は二つの方法

1を参照してください

+0

私はmyView.invalidate()を呼び出しました。 setContentView(R.layout.main)の後ろ。 inCreateでそれは動作しません。どこで無効化を呼びますか? – user1301568

+0

私はあなたのビューをアクティビティに追加していないと思います。アクティビティーは、ビュー階層に追加されていない限り、ビューを表示できません。要件に応じて、階層内の特定のレイアウトに追加する必要があります。 –

+0

右。私の質問は、追加する方法でした。とにかくありがとうございました。 – user1301568

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後に呼ばれたことに気づきました。

関連する問題