Android開發萬能圓角ImageView

2021-09-23 07:02:26 字數 2250 閱讀 4296

作者簡介

正文

最近一兩個月沒事做,然後就開始封裝一些東西,昨天上司讓我幫他做的圓角。思路自然是和網上的demo不一樣的。

網上demo的效果:

差不多應該是這樣的,但是容易出一些問題,比如你的本身就是個圓角?又或者太大,你想縮小顯示,但出現顯示內容不全?

我想實現的效果是這樣的:

圖畫的較醜,見諒。

意思就是以他的寬高的最小值,為正方形的寬給他做圓角,當然長方形也可以的,因為我試了效果,沒有問題,你們到時候可以自己嘗試。

參考文章:

這是翔神的文章,不過他的效果,並不是我想要的,因為,他的繪圖是從(0,0)點然後擷取寬高繪圖,並不是我想要的重中間擷取,然後繪圖。

大體**和他的差不多。不過依舊刪除了一些無用的**(哈哈,這個我抄**的特性,沒用放著幹嘛,礙眼。)

好了下面上**。初始化:

這邊我用到了dp2px。這個就是將dp轉換成px。網上**一堆~:

既然繼承了imageview,少不了的自然是onmeasure方法:

下面就是重點了,對 bitmapshader 不了解的,去看看這個:

設定bitmapshader的**如下:

如果有人看了前面我給的參考文章,那麼,你可以發現,我把這個類的**進行了改動,差不多就是把的起點座標從(0,0)移動到了我想要的起點。

至於為什麼,我們開啟imageview的原始碼,找到center_crop。這快**的意思差不多是將居中把。

來,我們上原始碼:

他怎麼計算的scale我們別管它,重點是如何計算他的dx和dy。

這裡我就舉個例子來計算。drawable的寬和高是(300,200)。我要繪製的view的寬高是(200,200)。按照 我的思路繪圖是從(50,0)到(250,250),而不是(0,0)到(200,200)。

話不多說。我們看原始碼的計算:

我們畫圖,來說明這一切,看完圖,你或許就懂了。

紅色框是我們之後的,那這樣,1這塊區域可以理解成沒了。銷毀了。但是實際的效果是這樣:

圓形好像看似沒什麼問題,那你們自己看圓角左邊是不是被拉伸,這個拉伸距離應該剛好是我們之前計算得到的50dp。因為上圖的1那塊已經不存在了,所以你畫圖的時候那快距離就是拉伸的距離。現在我們看看-50dp的圖。

1 的部分被移出去了。但他依然是存在的,所以繪製的圖是不會出現任何拉伸的。perfect~

屬性配置完了,剩下的就是ondraw方法咯。很簡單,**如下:

當然你也得考慮到 onsizechanged 的時候,**也不多:

好了。在這邊我補上attrs屬性:

現在。乙個完美的,萬能的圓角imageview就解決了。不過好像還缺點什麼,對了。自行修改圓角,自行修改型別,加上這個才算完美。

附上**:

現在我們新建個xml。放2張。乙個圓角,乙個圓形,先看看效果如何:

多張在外層加乙個scrollview。好了。我們來看一下效果:

完美~~

圓角大小自行修改。型別自行修改。好了。今天主要內容就這麼多把。整理了2個多小時~也是夠夠的。

萬能密碼 php,PHP萬能密碼

說實話如果乙個 的前台都是注入漏洞,那麼憑經驗,萬能密碼進後台的機率基本上是百分之百。可是有的人說對php的站如果是gpc魔術轉換開啟,就會對特殊符號轉義,就徹底杜絕了php注入。其實說這話的人沒有好好想過,更沒有嘗試過用萬能密碼進php的後台。其實gpc魔術轉換是否開啟對用萬能密碼進後台一點影響也...

mysql萬能 Mysql的萬能優化方法

在命令列執行 1.檢視優化器狀態 show variable like optimizer trace 2.會話級別臨時開啟 set session optimizer trace enabled on end markers in json on 3.設定優化器追蹤的記憶體大小 set optim...

萬能的應用商店 WiFi萬能助手

許可權列表 wifi萬能助手 獲取定位 允許應用通過網路或衛星對裝置進行定位 獲取額外的位置資訊提供程式命令 獲取額外的位置資訊提供程式命令。惡意應用程式可藉此干擾 gps 或其他位置源的正常工作。檢視網路狀態 允許應用程式檢視所有網路的狀態。開關wlan 允許應用開啟或關閉wlan 作為帳戶身份驗...