IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

La méthode "invalidate" n'agit pas


Sujet :

Android

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut La méthode "invalidate" n'agit pas
    Bonsoir à toutes et à tous,

    J'ai créé une application où je trace des courbes (accélérations x, y, z en fonction du temps) sur le layout de base (RelativeLayout). Dans un premier temps, je dessine les axes puis après, je mets à jour les données de chaque courbe en invoquant monLayout.invalide() ou monLayout.postInvalidate() à chaque fois que l'accéléromètre me fournit des données.

    Sur mon Samsung Galaxy S2, cela fonctionne sans problème.

    Avec un Archos Titanium 40, si dans le premier temps, les axes se tracent bien, par la suite la méthode invalide() ou postInvalidate() n'appelle pas la méthode onDraw(Canvas canvas) et donc les données ne sont pas affichées.

    Des idées du pourquoi du comment ?

    Merci de votre aide.

    NOTA : si j'ai les drivers me permettant de connecter mon S2 à eclipse, je n'ai pas ceux du Titanium 40.

    Pierre

  2. #2
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Bon, après avoir essayé les moult solutions que j'ai vues sur la toile et constaté qu'aucune ne fonctionnait, j'ai continué à chercher ... à tâtons et j'ai trouvé une solution à mon problème. Voici mon code initial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class MainActivity extends Activity  implements SensorEventListener{
    	RelativeLayout vueBase;
    	...
    	Dessin monImg;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		...
    		vueBase = (RelativeLayout)findViewById(R.id.VueBase);
    		monImg = new Dessin(this);
    		vueBase.addView(monImg);
    		...
    	}
    puis, là où j'en ai besoin pour rafraichir mon dessin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	vueBase.invalidate();
    Ça fonctionnait très bien avec le Galaxy S2, mais ne voulait rien savoir avec l'Archos Titanium 40

    Alors dans l'instruction de rafraichissement, j'ai tout simplement remplacé "vueBase" par "monImg".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //	vueBase.invalidate(); // ne fonctionne qu'avec le Galaxy S2
    	monImg.invalidate(); // fonctionne avec mes deux smartphones
    Ce qui me gêne est que je n'ai pas compris pourquoi. Si vous avez des idées.

    Cordialement.

    Pierre

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo