2011-03-07 4 views
1

Pour vous donner quelques informations sur mon problème, j'ai passé beaucoup de temps sur cette question, mais la plupart des questions que j'ai posées se rapportent à diverses façons que je pensais fonctionner, mais je n'ai jamais effectivement demandé quelle serait la meilleure façon de le faire.Android, Comment changer le fond Couleur dans la même activité

Pour montrer combien de travail j'ai fait, voici quelques questions de débordement de pile que j'ai posté en essayant différentes méthodes pour accomplir cette tâche.

Enfin voici quelques-unes des choses que j'ai essayé. Ma réponse initiale était que ce serait extrêmement facile et je pourrais simplement appeler setContentView chaque fois que je voulais changer mais clairement ce n'est pas le cas. Deuxièmement, j'ai essayé de définir différentes choses comme bacgkround, en éditant cet objet et en espérant que cela changerait. N'a pas fonctionné. Ensuite je regardais dans les choses que Android fournis, tels que

ViewFlippers: je pouvais tout changer, mais pas l'arrière-plan.

Liste d'état Dessins: Je n'ai pas très bien réussi à les implémenter, c'était probablement de ma faute?

Animation image par image: Remarque J'ai une question de débordement de pile à ce sujet ... besoin de plus?

Inutile de dire que je me suis rendu compte que je suis essayer trop dur de faire comme tâche ne devrait prendre 3-5 lignes de code. Donc, je demande des suggestions.

Répondre

0

Ma solution serait de créer un objet View personnalisé. La clé ici serait de surcharger la fonction onDraw, dans cette fonction, dessinez simplement sur la toile la couleur que vous voulez. Ça devrait être vraiment facile.

S'il vous plaît essayer et laissez-moi savoir si vous avez des questions ... voici quelques conseils ...

Dans votre objet ... Voir

public class MyView extends View { 
    @Override protected void onDraw(Canvas canvas) { 
    canvas.drawColor(mColor); 
    } 

    private int mColor = 0xff000000; //black 
    public void SetColor(int aColor) { 
    mColor = aColor; 
    invalidate(); //Not sure about this line, can't remember if this is the correct call... there is a call that causes a redraw 
    } 
} 

Dans votre XML Mise en page d'activité. ..

<your.package.name.ClassName 
    android:id="@+id/ClassName1" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"/> 

Dans votre code d'activité ...

@Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.yourxmllayoutfile); 
    MyView aMyView = (MyView) findViewById(R.id.ClassName1); 
    aMyView.SetColor(0xff00ff00); //Green I think, this line changes the color 
} 

Bonne chance :)

+0

D'accord, je n'ai pas eu le temps de vérifier la question jusqu'à maintenant. Je vais jouer avec et vous laisser savoir comment ça s'est passé. – Craig

+0

Pourriez-vous m'expliquer pourquoi le paquet et le nom de classe sont nécessaires dans le fichier xml? Je ne comprends pas du tout ce qui se passe dans le fichier XML. Je reçois l'identifiant, la taille et la disposition, mais je ne comprends pas cette partie qui semble faire tout le travail. Aussi, je suppose que lorsque vous mettez "votre nom de classe" que vous faisiez référence au nom de classe du fichier de vue java personnalisé? – Craig

+0

Oui ...fondamentalement dans mon exemple, j'ai appelé la classe de vue personnalisée «MyView». Je m'attendais à ce que vous appeliez cela quelque chose d'autre, donc vous devez le remplacer par ce que vous appelez la classe (ce qui arrive à être ce que Java utilise aussi comme nom de fichier). Vous devez spécifier le nom Pakage pour tous les objets View non définis dans le SDK Android. – CatalystNZ

Questions connexes