27/11/14 Slide Grafica 144 Università di Salerno -‐ a.a. 2013-‐2014 Android Mobile Programming – Prof. R. De Prisco • Un’immagine può essere disegnata in – un oggeJo View • grafica semplice, senza necessità di cambiamenO – un oggeto Canvas • grafica complessa, aggiornamenO frequenO • 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 Android Mobile Programming – Prof. R. De Prisco Slide 145 Università di Salerno -‐ a.a. 2013-‐2014 • L’oggeJo Drawable deve essere inserito nell’oggeJo View – direJamente nel file XML – in modo programmaOco • View.setImageDrawable() GraficaSimpleImg 1 27/11/14 Slide Animazioni 146 Università di Salerno -‐ a.a. 2013-‐2014 Android Mobile Programming – Prof. R. De Prisco • 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. Slide Animazioni 147 Università di Salerno -‐ a.a. 2013-‐2014 Android Mobile Programming – Prof. R. De Prisco • Class AnimaOon • permeJe di – leggere le animazioni dai file XML – applicarle alle ImageView GraficaImgAnim 2 27/11/14 Slide Custom Views 148 Università di Salerno -‐ a.a. 2013-‐2014 Android Mobile Programming – Prof. R. De Prisco • 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 Slide Albero delle View 149 Università di Salerno -‐ a.a. 2013-‐2014 Android Mobile Programming – Prof. R. De Prisco LinearLayout Frame LinearLayout ImageView BuJon RelaOveLayout BuJon ImageView EditText BuJon public class View { … public void onMeasure(…) public void onLayout(…) … } 3 27/11/14 Meccanismo di layout Android Mobile Programming – Prof. R. De Prisco Slide 150 Università di Salerno -‐ a.a. 2013-‐2014 • “Container Views” – RelaOveLayout – LinearLayout • 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 Android Mobile Programming – Prof. R. De Prisco Slide 151 Università di Salerno -‐ a.a. 2013-‐2014 • 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 27/11/14 Misura Android Mobile Programming – Prof. R. De Prisco Slide 152 Università di Salerno -‐ a.a. 2013-‐2014 • La fase di misura offre la possibilità alle views di chiedere lo spazio di cui hanno bisogno • 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() Android Mobile Programming – Prof. R. De Prisco Slide 153 Università di Salerno -‐ a.a. 2013-‐2014 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 5 27/11/14 MeasureSpec Android Mobile Programming – Prof. R. De Prisco Slide 154 Università di Salerno -‐ a.a. 2013-‐2014 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 Android Mobile Programming – Prof. R. De Prisco Slide 155 Università di Salerno -‐ a.a. 2013-‐2014 • 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 27/11/14 Disegnare nel canvas Android Mobile Programming – Prof. R. De Prisco Slide 156 Università di Salerno -‐ a.a. 2013-‐2014 • 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 Android Mobile Programming – Prof. R. De Prisco GraficaCustomWidget Slide 157 Università di Salerno -‐ a.a. 2013-‐2014 GraficaCanvas 7
© Copyright 2024 ExpyDoc