2011-05-27 3 views
0

J'ai un petit problème est le code ici, j'ai jusqu'à présent:override Android onDraw() problème

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     setContentView(new GraphicView(this)); 

     TextView mainLabel = (TextView)findViewById(R.id.title); 
      mainLabel.setText("Android Circle Path"); 
    } 

    static class GraphicView extends View{ 
     public GraphicView(Context context){ 
      super(context); 
     } 

     @Override 
     public void onDraw(Canvas canvas){ 


     } 
    } 
} 

Et le fichier main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="30dip" 
> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginLeft="20dip" 
    android:layout_marginRight="20dip"> 

     <TextView 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_marginBottom="20dip" 
      android:textSize="24.5sp" 
      android:id="@+id/title"> 
     </TextView> 

    </LinearLayout> 
</LinearLayout> 

Lorsque je tente de régler la texte dans la fonction onDraw() l'application se bloque, qu'est-ce que je fais mal?

+0

La trace de la pile de logcat aiderait. – Haphazard

Répondre

1

La méthode onDraw d'une vue doit être utilisée pour restituer cette vue seule. Vous ne devez pas appeler les méthodes de mise à jour de l'interface utilisateur dans une autre vue. Déplacez le code pour définir le titre dans la méthode onCreate de votre activité, car cela ne doit être fait qu'une seule fois. Ensuite, dessinez votre cercle dans votre vue personnalisée. En outre, puisque votre vue personnalisée n'implémente pas ViewParent, elle ne doit pas être utilisée pour contenir le titre TextView. Réorganisez votre fichier XML pour déplacer la vue du titre en dehors de GraphicsView

+0

donc j'ai déplacé le TextView hors de GraphicsView dans mon XML aussi bien que déplaçant la ligne de code à ma méthode onCreate cependant elle se bloque toujours. D'autres idées? –

+0

Où se bloque-t-il, et à quelle exception? Veuillez modifier votre message et ajouter le logcat pour l'exception. –

0

TextView est une variable locale créée dans la méthode onCreate de cette Activity. Donc, la portée de TextView est confinée dans cette méthode onCreate seulement. Vous ne pouvez pas y accéder en dehors de cette méthode. De plus, ce que vous essayez de faire n'est pas le bon moyen, à l'intérieur de la méthode onDraw de GraphView vous êtes censé dessiner les composants GraphView seuls, pas les vues extérieures ou toute autre chose.