Autore Topic: Domanda banale sul Canvas  (Letto 998 volte)

Offline Davide_77

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Win XP
Domanda banale sul Canvas
« il: 10 Aprile 2010, 10:48:35 CEST »
0
Salve sono ancora qui a chiedere aiuto..... perdonatemi

Io ho una curiosità... Come si fa a ripulire un canvas?
Mi spiego.. ho una routine che disegna un banalissimo rettangolo verde.

Codice: [Seleziona]
tempRect.bottom = mBottomRectCoord ;
tempRect.left = tempRect.left ;
tempRect.right = tempRect.right;
tempRect.top = tempRect.top ;
                               
canvas.drawRect(tempRect, mLinePaint);
canvas.save();
canvas.restore();

Ma come ho letto ovunque, il canvas è incrementale (perdonatemi il termine), per cui ogni volta disegna quello che c'era prima più la parte nuova.
Se io volessi disegnare solo la parte nuova di questo rettangolo, devo ripulire il canvas oppure agire in altro modo?

grazie in anticipo!

Offline Davide_77

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Win XP
Re:Domanda banale sul Canvas
« Risposta #1 il: 13 Aprile 2010, 13:23:47 CEST »
0
Salve, mi auto rispondo dopo aver studiato nuovamente la gestione di Thread e Canvas dicendo che fondamentalmente il canvas viene ridisegnato ogni volta.  In realtà non esiste la necessità di ripulire il Canvas anche se in giro avevo trovato diversi modi (manco uno funzionava....)

Al momento mi è venuta una idea per un semplice (per chi sa fare  :D ) giochino che prima o poi vorrei vendere.
Leggendo qua e là articoli sulla costruzione e la logica dei videgiochi (per me è la prima volta) trove spesso trattati sulla quantità dei FPS.
Purtroppo grazie al signor Nexus che non si degna ad uscire, non ho un cellulare su cui provare, ma solo l'emulatore.

C'è un modo per capire se sto sovraccaricando l'applicazione per cui non riesce a sostenere la soglia minima di 25 FPS?
Credo che l'emulatore sia moooooooolto più lento di un cell normale....

Grazie a tutti e gran bel lavoro!!!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Domanda banale sul Canvas
« Risposta #2 il: 23 Agosto 2010, 17:36:19 CEST »
0
Puoi benissimo testare se la tua app regge o meno il limite dei 25fps, ma hai bisogno di un dispositivo reale, perché non avresti riscontri su un emulatore (dipende fortemente dall'hardware del pc su cui gira).
Ad ogni modo, una limitazione viene rappresentata pure dalla varietà di dispositivi presenti che montano Android, quindi otterresti comunque un risultato piuttosto poco attendibile: avresti la necessità di provarlo su più dispositivi.
Per essere sicuro, comunque, dovresti provare a raggiungere il limite che ti sei imposto su un dispositivo di fascia bassa, in modo da garantirti il frame rate su quasi tutti i dispositivi.

Per monitorare la velocità di aggiornamento della tua app,  dovresti contare quante volte al secondo viene invocato l'aggiornamento della pagina (con tutto il suo contenuto).
Poiché abbiamo bisogno di valori indicativi, si può fare in questo modo:

1) la prima volta prendo il Time del dispositivo e azzero il contatore frames
2) ogni volta che ridisegno la pagina, controllo che il Time del momento - il Time di partenza non sia maggiore di 1000 (un secondo).
Se è maggiore o uguale a mille, allora il valore di frames indica la velocità di aggiornamento (i tuoi fps) della tua app.
Se è minore di mille, incremento frames.

A questo punto, però, dovresti garantirti anche la possibilità di non superare questa soglia, per non velocizzare l'applicazione.
Se il tuo terminale di test riesce a fare le tue operazioni a 25fps e un altro riesce a farne il doppio nello stesso tempo, avresti un  50fps, per cui dovresti pensare di aspettare fino al completamento del tuo secondo, una volta raggiunto il frame rate di riferimento.

Spero di esserti stato utile.

7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/