2015-03-07 6 views
7

Mi chiedo se c'è un modo per disegnare aree riempite (come un poligono pieno) con la tela di Android senza utilizzare la classe Path e chiamare canvas.drawPath(...).C'è un modo per disegnare un'area riempita con Canvas senza usare Path?

La ragione per cui voglio farlo senza Path è perché devo disegnare set di dati molto grandi e canvas.drawPath(...) non è hardware accelerato e quindi lento.

Le prestazioni quando si utilizza canvas.drawLines(...) sono molto migliori a causa dell'accelerazione hardware, tuttavia non ho trovato un modo per disegnare il poligono riempito utilizzando questo approccio (anche quando le linee sono tutte collegate).

Anche chiamare paint.setStyle(Style.FILL) non ha riempito il poligono quando si utilizza drawLines(...).

C'è un modo per disegnare un poligono pieno senza utilizzare l'approccio Path?

Oppure c'è qualche altro modo per migliorare le prestazioni utilizzando lo Canvas?

+0

È il tuo 'view' interattivo (hai modifiche al set di dati al volo che devono essere resi)? Basta disegnare il set di dati su 'canvas' una volta è lento? –

+0

My View è interattivo e quindi costantemente aggiornato, sto già utilizzando un meccanismo di buffering, che ha notevolmente migliorato le prestazioni. Tuttavia, non sono ancora soddisfatto. –

+0

La mia ultima domanda per elaborare una risposta. Quando si verifica una modifica al set di dati, si disegna nuovamente l'intero set di dati o solo quelli interessati nell'area del cambiamento? Voglio dire, stai già usando 'view.invalidate (Rect dirty)'? Questo è solo un consiglio per migliorare le prestazioni. –

risposta

0

Si potrebbe voler vedere opengl view e usarlo per tutti i disegni necessari. Sicuramente sarà dannatamente veloce. Tuttavia, tutto il tuo codice di disegno deve essere riscritto.

+3

Non rispondendo veramente alla domanda, che sta chiedendo specificamente una soluzione usando il 'Canvas'. –

+1

Sì, sono consapevole che OpenGL ES è più veloce. Tuttavia, non è un'opzione per me. –

0

probabilmente è necessario fare qualcosa di simile:

Paint red = new Paint(); 

red.setColor(android.graphics.Color.RED); 
red.setStyle(Paint.Style.FILL); 

E utilizzare questo colore per il vostro percorso, al posto del tuo ARGB. Assicurati che l'ultimo punto del tuo percorso finisca sul primo, ha anche senso.

Problemi correlati