2012-11-03 14 views
24

Ho il seguente frammento di codice, che trasforma un insieme di limiti usando la matrice di trasformazione corrente della tela.Qual è l'alternativa per deprecato Canvas.getMatrix()?

final RectF bounds = renderer.computeBounds 
    activeCanvas.getMatrix().mapRect(result, bounds); 
    return bounds; 

Tuttavia, con l'ultimo livello di API (16) Ho ricevuto un avviso che indica

The method getMatrix() from the type Canvas is deprecated

come confermato dal API 16 Diff Specification.

Che va bene e tutto, ma la documentazione corrente su Canvas.getMatrix() non menziona la deprecazione, né offre un'alternativa. Come soluzione temporanea ora sopprimono semplicemente questo avviso, ma mi piacerebbe davvero sapere che aspetto ha il modo nuovo e migliorato (tm).

+0

use canvas.concat (matrice) –

risposta

9

La matrice viene ora gestita dalla vista anziché dalla tela. Purtroppo non posso spiegarti la decisione di Google su questo, ma dovresti essere in grado di riprodurre esattamente le stesse cose con i 2 modi.

+0

Questo sembra essere vero, anche se 'getMatrix',' getRotation' ... sono stati introdotti in api 11. Ad ogni modo, TransformationInfo viene introdotto in Visualizza per conservare queste informazioni. Perché? Non sono a conoscenza, ma sospetto che abbia a che fare con la nuova animazione api –

+0

Penso che il motivo principale per cui è che lavorare con una tela apporta più complessità che lavorare direttamente con la vista. La logica di gestire la vista rende il codice più uniforme direi, ed è probabilmente la logica che cercano di ottenere. – ben

+0

Ma una tela è ancora molto utile per disegnare/generare bitmap. –

3

Se non si ha accesso ad una vista:

Per aggirare il problema, nella maggior parte dei casi, è possibile applicare qualsiasi trasformazione utilizzando canvas.scale(), canvas.translate(), ecc piuttosto che recuperare la matrice, modificarla e quindi impostare di nuovo la matrice.

Dal Google issue with getMatrix when hardwareAcceleration is enabled, come riferito da Sandeep.