main = new ImagePanel(this, this);
setContentView(main,new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
main.getWidth(); // RITORNA 0 !!
Come da codice, la getWidth() della mia classe view ritornava ancora 0 (zero). Anche nell'onStart dell'activity (dove volevo inizializzare le mie logiche) la mia classe view aveva ancora larghezza ed altezza a zero, tutto questo perchè non è ancora stata misurata
A quel punto mi son messo di buzzo buono fino a trovare questa semplice spiegazione :
A common mistake made by new Android developers is to use
the width and height of a view inside its constructor. When
a view’s constructor is called, Android doesn’t know yet how
big the view will be, so the sizes are set to zero. The real sizes
are calculated during the layout stage, which occurs after
construction but before anything is drawn. You can use the
onSizeChanged( )method to be notified of the values when they
are known, or you can use the getWidth( ) and getHeight( )methods
later, such as in the onDraw( ) method.
Per cui ora sto spostando le logiche di inizializzazione in modo da poter avviare i miei calcoli a dopo la prima chiamata dell'onSizeChanged della mia view.
Se non erro, anche i cambi di orientamento dovranno attendere un onSizeChanged per sapere le nuove dimensioni dello schermo, ma di questo me ne occuperò appena affronterò il problema di rispondere alla rotazione del dispositivo.
Nessun commento:
Posta un commento