方法一:BitmapShader+Matrix
(1)繼承自ImageView券腔,不用處理wrap_content和padding問題。
(2)重寫onMesure()方法局扶,得到測量寬高恨统,然后取最小值,作為半徑三妈。然后設(shè)置寬高為它們之間的最小值畜埋。
(3)得到圖片對應(yīng)的Drawable,轉(zhuǎn)化為相應(yīng)的Bitmap畴蒲。(轉(zhuǎn)化的方法)
(4)根據(jù)得到的Bitmap創(chuàng)建BitmapShader悠鞍;根據(jù)Bitmap和View得到縮放比;
給BitmapShader設(shè)置Matrix模燥;
(5)onDraw繪制
(6)onSavaInstantState()和onRestoreInstantState()存儲半徑咖祭。
方法二:Xfermode
(1)繼承自ImageView,不用處理wrap_content和padding問題涧窒。
(2)重寫onMesure()方法心肪,得到測量寬高,然后取最小值纠吴,作為半徑硬鞍。然后設(shè)置寬高為它們之間的最小值。
(3)得到圖片對應(yīng)的Drawable,轉(zhuǎn)化為相應(yīng)的Bitmap固该。(轉(zhuǎn)化的方法)
(4)創(chuàng)建View對應(yīng)的的Bitmap锅减。繪制圓形。
(5)采用的是DST_IN模式伐坏。先繪制圖片怔匣,在繪制View(形狀)