2010-03-29 14 views
6

HI all,Nuovo per Android - Disegnare una vista in fase di esecuzione

Ho appena iniziato a sviluppare per Android. Sto cercando di portare una delle mie applicazioni per iPhone, ma non riesco a capire come disegnare una vista in fase di esecuzione (una vista non dichiarata nell'XML). Fondamentalmente, voglio disegnare un semplice rettangolo, ma poi essere in grado di manipolare la sua cornice dopo essere stata disegnata.

Ci scusiamo se si tratta di una domanda davvero, molto semplice, ma non riesco a trovare qualche equivalente all'SDK di iPhone qui.

Grazie in anticipo!

risposta

7

Sembra che tu voglia sperimentare con la grafica 2D - per questo, devi usare uno Canvas. Puoi controllare il disegno della tela attraverso il metodo invalidate(), che indica a Android di ridisegnare l'intero processo attivando il tuo metodo personalizzato onDraw(). Si dice di non voler usare il file XML, ma questo è il modo più semplice per inserire un Canvas: non è necessario definirne il contenuto nel file XML, ma semplicemente dire al file di layout che è lì. Un modo semplice ma potente per inserire una tela nell'applicazione è personalizzare una vista. Ad esempio, includere nel file XML un elemento <your.package.CustomView android:.../>. Quindi dichiarare la classe CustomView extends View. Qualsiasi tipo di disegno che si desidera eseguire, inserire il metodo onDraw().

Ad esempio, per disegnare un rettangolo, fare qualcosa di simile.

//First you define a colour for the outline of your rectangle 
rectanglePaint = new Paint(); 
rectanglePaint.setARGB(255, 255, 0, 0); 
rectanglePaint.setStrokeWidth(2); 
rectanglePaint.setStyle(Style.STROKE); 

//Then create yourself a Rectangle 
Rect rectangle = new Rect(left, top, right, bottom) //in pixels 

//And here's a sample onDraw() 
@Override 
public void onDraw(Canvas canvas){ 
    rectangle.offset(2, 2); 
    canvas.drawRect(rectangle, rectanglePaint); 
} 

Ogni volta invalidate() viene chiamato dal programma, la vista sarà ridisegnata e il rettangolo spostato 2px verso il basso e verso destra. Nota: il ridisegno avviene solo con il thread principale è 'waiting'. In altre parole, se si ha una chiamata di ciclo invalida più volte, la vista non verrà disegnata fino a quando il ciclo non termina. Puoi aggirare questo, ma questo aggiunge più complicazioni. Per un esempio di come è fatto, guarda il gioco di esempio LunarLander di Google: è un semplice gioco che dimostra una visualizzazione personalizzata, 2 thread e come implementare l'animazione continua.

+0

Funziona magnificamente, grazie! –

Problemi correlati