2013-02-05 5 views

Répondre

1

En fait, lorsque vous appelez setContentView() le mot Android commence les vues de dessin sur la surface, que vous pouvez observer sur l'utilisation viewTrewwObserve Vous ne pouvez pas obtenir la hauteur et la largeur de ImageView en onCreate() comme tirer pas encore.

Vous pouvez utiliser, (pas essayé)

imageView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
    // Get ImageView height width here <------------ 
    } 
}); 

Il enregistrera un rappel à invoquer lorsque l'état de mise en page globale ou la visibilité des points de vue dans les changements d'arbre vue.

Mise à jour:

Ou vous pouvez utiliser onWindowFocusChanged (boolean hasFocus).

Ceci est le meilleur indicateur pour savoir si cette activité est visible par l'utilisateur. L'implémentation par défaut efface l'état de suivi des clés. Vous devez donc toujours l'appeler.

+0

merci beaucoup.Il a travaillé pour moi. – Sakthimuthiah

0

(1) Vous pouvez l'obtenir à l'aide du getViewTreeObserver() ou (2), vous pouvez ajouter une tâche asynchrone sur votre onCreate()

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    //SIMPLY CALL YOUR ASYN TASK WITH DELAY OVER HERE LIKE THIS. 

    new MyImageDrawClass().execute(); 
} 



class MyImageDrawClass extends AsyncTask<Void, Void, Void> 
{ 
    @Override 
    protected Void doInBackground(Void... params) 
    { 
     try 
     { 
      Thread.sleep(100); 
     } 
     catch(InterruptedException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 
     LayoutParams lp = mContent.getLayoutParams(); 
     value_wdth = mContent.getWidth(); 
     value_hght = mContent.getHeight(); 

     //PERFORM YOUR OTHER DRAWING STUFF.. 
     super.onPostExecute(result); 
    } 

} 

laissez-moi savoir si vous trouvez problème avec cela, vous pouvez également réduire le temps delay to Thread.sleep(10); J'utilise généralement cette méthode pour obtenir de la hauteur et obtenir de la largeur.

+0

Ceci est un hack complet. Thread.sleep() est utilisé beaucoup trop souvent, généralement pour de mauvaises choses. C'est une mauvaise chose. Créer artificiellement un retard dans «l'espoir» que la mise en page se termine dans le temps. Yeuch. – Simon

+0

votre droit à ce sujet, mais j'ai déjà mentionné le '" 1) Vous pouvez l'obtenir en utilisant le getViewTreeObserver() "' et c'était juste une autre solution s'il souhaite y arriver de cette façon, le hack semble fonctionner très bien pour moi. – Anuj

Questions connexes