矢量圖(SVG)在Android系統中通過VectorDrawable來使用,但是在使用矢量圖的時候還是發虛(變模糊了)
分析原因
兩個代碼
-
VectorDrawable
在 draw函數中,先獲取Drawable的大小,然后根據這個尺寸來繪制圖形,這樣繪制的圖形是不會模糊的。
所以可以看到問題不是出現在 VectorDrawable的。
-
ImageView
在 configureBounds 函數中,根據View的大小來修改圖片大小,但是具體如何修改的,是根據 ScaleType來決定的。
如果 scaleType 為 ScaleType.FIT_XY ,則直接修改 Drawable 的 bounds
而其他情況,則是由 mMatrix 來縮放 mDrawable。
也就是說 **如果ImageView 的scaleType 不是 FIT_XY, 并且矢量圖原本的尺寸不是 0(在xml中定義,是不可能為0的)的話,則ImageView會先通過矢量圖原來的大小來得到一個圖標,然后這個圖標通過 matrix 的方式來縮放,所以最終繪制的圖標就是被縮放過的圖標了。而ImageView默認的 scaleType的默認值為 FIT_CENTER **
解決方式:
將ImageView 的 ScaleType 為 FIT_XY 即可
解決方式
- 將ImageView 的 ScaleType 為 FIT_XY 即可
- 修改矢量圖中的尺寸定義,把圖標的寬度和寬度修改為比較大的值,這樣可以保證ImageView只是 縮小圖標而不會放大圖標,從而避免由于放大圖標導致的圖標模糊的問題