2012-11-03 75 views
24

我有以下代碼片段,它使用畫布'當前變換矩陣變換一組邊界。已棄用Canvas.getMatrix()的替代方法是什麼?

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

然而,最新的API級別(16),我得到一個警告,指出

The method getMatrix() from the type Canvas is deprecated

API 16 Diff Specification證實。

哪一個沒有問題,但Canvas.getMatrix()的最新文檔沒有提及棄用,也沒有提供替代方案。作爲一種解決方法,我現在只是簡單地禁止這個警告,但我真的很想知道這樣做的新方式和改進方式。

+0

使用canvas.concat(矩陣) –

回答

9

Matrix現在由視圖而不是Canvas處理。不幸的是,我無法向你解釋Google對此的決定,但你應該能夠用兩種方式重現同樣的事情。

+0

雖然'getMatrix','getRotation' ...是在api 11中引入的,這似乎是正確的。無論如何,TransformationInfo在View中引入以保存此信息。爲什麼?我不知道,但我懷疑它必須與新的動畫api –

+0

我認爲主要原因是與Canvas合作帶來更多的複雜性比直接與視圖工作。處理View的邏輯使得代碼更加統一我可以說,這可能是他們嘗試實現的邏輯。 – ben

+0

但是在繪製/生成位圖時,畫布仍然非常有用。 –

3

如果您沒有訪問視圖:

要解決的問題,在大多數情況下,你可以使用canvas.scale(),canvas.translate()等應用任何轉換。而不是檢索矩陣,修改它,然後再次設置矩陣。

來自Google issue with getMatrix when hardwareAcceleration is enabled,正如Sandeep所引用的那樣。

相關問題