2012-03-29 4 views
3

J'ai quelque chose à dessiner à l'exécution. J'ai dessiné dans onDraw dans la classe MyView. Parce que j'ai déjà utilisé setContentView (R.layout.main) dans onCreate, je ne peux plus l'utiliser.
Comment appeler onDraw après setContentView (R.layout.main)?Comment appeler onDraw après setContentView (R.layout.main)?

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

Répondre

2

Je vois deux façons

1: Vous pouvez ajouter votre myView (par exemple) à un ViewGroup défini dans R.layout.main

2: Vous pouvez ajouter directement dans votre utilisation MyView XML R.layout.main. Au lieu de « LinearLayout » et ainsi de suite, vous le nom de classe qualifié complet

voir http://developer.android.com/guide/topics/ui/custom-components.html (en bas)

+0

Je n'ai pas encore essayé. Mais je pense que ça va marcher. C'est comme utiliser un widget personnalisé. – user1301568

1

Vous ne devriez pas appeler onDraw() vous-même. Au lieu de cela, pour forcer un redessin, appelez le invalidate().

Si la vue est visible, onDraw(android.graphics.Canvas) sera appelé à un moment donné dans l'avenir.

+0

J'ai appelé myView.invalidate(); après setContentView (R.layout.main); dans onCreate. Ça ne marche pas. Où puis-je appeler invalider? – user1301568

+0

Je suppose que vous n'avez pas ajouté votre point de vue à l'activité. L'activité ne peut pas afficher une vue à moins qu'elle ne soit ajoutée à la hiérarchie de vue. En fonction de vos besoins, vous devrez peut-être l'ajouter à une mise en page particulière dans la hiérarchie. –

+0

Droite. Ma question était comment ajouter. En tout cas merci. – 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(); 
} 

J'ai remarqué que onDraw a été appelé après addView.