Grafica Un immagine può essere disegnata in un oggejo View grafica semplice, senza necessità di cambiameno un oggeto Canvas grafica complessa, aggiornameno frequeno 144 Classe Drawable rappresenta un oggejo che può essere disegnato un immagine, ma anche un colore, una forma, etc ShapeDrawable una forma BitmapDrawable una matrice di pixels ColorDrawable un colore (uniforme) Grafica 145 L oggejo Drawable deve essere inserito nell oggejo View direjamente nel file XML in modo programmaoco View.setImageDrawable() GraficaSimpleImg 1
Animazioni 146 Android permeje di definire delle animazioni da applicare alle immagini DescriJe con file XML rotazione traslazione scaling (dimensione) trasparenza con controllo di vari parametri es., punto di pivot, velocità, etc. Animazioni 147 Class AnimaOon permeje di leggere le animazioni dai file XML applicarle alle ImageView GraficaImgAnim 2
Custom Views 148 Android ha molo widget PulsanO, Liste, ImageView, etc, etc. Per esigenze parocolare possiamo definire dei widget personalizzao PermeJono un maggiore controllo sulla grafica ovviamente sono più complicao da usare Albero delle View 149 LinearLayout ImageView Frame LinearLayout EditText RelaOveLayout BuJon BuJon BuJon ImageView public class View { public void onmeasure() public void onlayout() 3
Meccanismo di layout Container Views RelaOveLayout LinearLayout 150 Il meccanismo di layout inizia quando viene chiamato il metodo requestlayout su una View dell albero solitamente un widget chiama requestlayout quando ha bisogno di altro spazio requestlayout meje un evento nella coda degli eveno UI Quando l evento viene processato, ogni container view ha la possibilità di interagire con i figli Meccanismo di layout 151 Il processo ha due fasi 1. misura delle views contenuto nel container 2. posizionamento delle views all interno del container TuJe le view devono implementare la fase 1 Sole le view container devono avere anche la fase 2 4
Misura La fase di misura offre la possibilità alle views di chiedere lo spazio di cui hanno bisogno 152 Android inizia il processo chiamando il metodo measure sulla radice dell albero a parore dalla radice ogni container view chiede ai figli lo spazio di cui hanno bisogno la richiesta si propaga ricorsivamente Mesaure è un metodo final che non può essere riscrijo onmeasure invece sì, viene chiamato da measure onmeasure() public class MyView extends Views{ MyView(Context context) { super(context); @Override public void onmeasure(int widthmeasurespec, int heightmeasurespec) { setmeasureddimension( getsuggestedminimumwidth(), getsuggestedminimumheigh());. onmeasure potrebbe essere chiamata varie volte! gli int contengono anche dei bit addizionali 153 5
MeasureSpec 154 int widthmode = MeasureSpec.getMode(widthMeasureSpec); int width = MeasureSpec.getSize(widthMeasureSpec); int heightmode = MeasureSpec.getMode(heightMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); width e heigth in pixels widthmode e heigthmode MeasureSpec.EXACTLY MeasureSpec.AT_MOST MeasureSpec.UNSPECIFIED Layout 155 Nella fase di Layout i view container comunicano la posizione effevva ad ogni view figlio public class MyView extends Views{ @Override public void onlayout (int x1, int y1, int x2, int y2) { Log.d("DEBUG","onLayout ); Log.d("DEBUG","coordinate x1="+x1+" y1="+y1+" x2="+x2+" y2="+y2); int smw = getsuggestedminimumwidth(); int smh = getsuggestedminimumheight(); Log.d("DEBUG","onLayout smw="+smw+" smh="+smh); setmeasureddimension(smw,smh);. 6
Disegnare nel canvas 156 Quando la view è stata posizionata verrà disegnata metodo ondraw OggeJo Paint e metodi dell oggejo Canvas public class MyView extends Views{ @Override public void ondraw (Canvas canvas) { //Codice per disegnare la view. Esempi 157 GraficaCustomWidget GraficaCanvas 7