2012-03-29 6 views
3

Ich habe etwas zur Laufzeit zu zeichnen. Ich habe in der MyView-Klasse onDraw gezeichnet. Da ich setContentView (R.layout.main) bereits in onCreate verwendet habe, kann ich es nicht noch einmal verwenden.
Wie onDraw nach setContentView (R.layout.main) aufrufen?Wie onDraw nach setContentView (R.layout.main) aufrufen?

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

Antwort

2

Ich sehe zwei Möglichkeiten

1: Sie könnten Ihre myView (Beispiel) zu einem Viewgroup in R.layout.main

2 definiert hinzu: Sie direkt hinzufügen MyView Verwendung könnte in Ihrem XML R.layout.main. Statt „Linearlayout“ und so weiter, Sie die vollen qualifizierten Klassennamen

http://developer.android.com/guide/topics/ui/custom-components.html (siehe unten)

+0

Ich habe es noch nicht ausprobiert. Aber ich denke, es wird funktionieren. Es ist wie ein benutzerdefiniertes Widget. – user1301568

1

Sie sollten onDraw() nicht selbst aufrufen. Rufen Sie stattdessen invalidate() auf, um ein Neuzeichnen zu erzwingen.

Wenn die Ansicht sichtbar ist, onDraw(android.graphics.Canvas) wird irgendwann in der Zukunft genannt werden.

+0

Ich rief myView.invalidate(); nach setContentView (R.layout.main); in onCreate. Es funktioniert nicht. Wo rufe ich Ungültig an? – user1301568

+0

Ich schätze, du hast deine Sicht nicht zu der Aktivität hinzugefügt. Die Aktivität kann eine Ansicht nur anzeigen, wenn sie der Ansichtshierarchie hinzugefügt wurde. Abhängig von Ihren Anforderungen müssen Sie möglicherweise ein bestimmtes Layout in der Hierarchie hinzufügen. –

+0

Rechts. Meine Frage war, wie man hinzufügt. Trotzdem danke. – 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(); 
} 

Ich bemerkte, dass OnDraw nach addView genannt wurde.

Verwandte Themen