使用databinding設(shè)置圓角背景,代替drawable方式
平壩網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
注意:這個(gè)只是設(shè)置一個(gè)背景,所有圖片的圓角不能使用它,只能是viewGroup或者TextView。
提示:圖片可以使用QMUIRadiusImageView
1、支持view和viewGroup的圓角,邊框、和單個(gè)圓角等;
2、app:bgRadius:圓角大小,必須用"@{R.dimen.ui_dp8}"賦值;
3、app:bgSolidColor:設(shè)置背景色;
4、app:bgStrokeColor:設(shè)置邊框顏色;
5、bgTopLeftRadius:設(shè)置左上的圓角;
我們要實(shí)現(xiàn)的圖片控件繼承自 AppCompatImageView ,它是 ImageView 的子類,但提供了更好的兼容性,我們?cè)诖嘶A(chǔ)上添加了若干自定義的屬性和方法以實(shí)現(xiàn)最終的 NiceImageView :
要實(shí)圓角或者圓形的顯示效果,就是對(duì)圖片顯示的內(nèi)容區(qū)域進(jìn)行“裁剪”,只顯示指定的區(qū)域即可。如何做呢?
一種比較直接的辦法是這樣的,由于圖片是被繪制在畫布上的,所以用 canvas 的 clipPath() 方法先將畫布裁剪成指定形狀,這樣就能讓圖片按指定形狀顯示了,重新 draw() 方法即可:
這樣使用 src 、 background 屬性給ImageView設(shè)置顯示的圖片都能達(dá)到預(yù)期的顯示效果。但是由于 clipPath() 方法不支持抗鋸齒,圖片邊緣會(huì)有明顯的毛糙感,體驗(yàn)并不理想,所以需要尋找其它方法。
另一種方法是使用圖像的 Alpha 合成模式 ,即
PorterDuff 來實(shí)現(xiàn), 官方文檔 。這里我們使用其中的 DST_IN 模式。整個(gè)過程就是先繪制目標(biāo)圖像,也就是圖片;再繪制原圖像,即一個(gè)圓角矩形或者圓形,這樣最終目標(biāo)圖像只顯示和原圖像重合的區(qū)域。
到這里就實(shí)現(xiàn)了顯示為圓角或者圓形了。但是需要通過 src 屬性或者對(duì)應(yīng)的方法來設(shè)置圖片,否則不能達(dá)到預(yù)期效果。
繪制邊框就相對(duì)容易理解了,只需要繪制一個(gè)指定樣式的圓角矩形或者圓形即可:
當(dāng)圖片顯示為圓形時(shí),還可以繪制一個(gè)內(nèi)邊框,但圓角矩形的話由于圓角大小的問題,目前只能設(shè)置一個(gè)邊框咯。
但是有個(gè)問題,繪制的邊框會(huì)覆蓋在圖片上,如果邊框太寬會(huì)導(dǎo)致圖片的可見區(qū)域變小了,影像顯示效果,像這樣,左下角的花盆不見了:
那么如何讓邊框不覆蓋在圖片上呢?可以在 Alpha 合成繪制前先將畫布縮小一定比例,最后再繪制邊框,這樣問題就解決了。
縮放后的ImageView顯示區(qū)域的寬高就是原寬、高分別減去2倍的邊框?qū)挾龋@樣縮小的比例也就顯而易見了。效果如下,左下角的花盆出來了:
遮罩可以理解為一層帶透明度的顏色,遮罩默認(rèn)不繪制,當(dāng)制定了遮罩顏色時(shí)才會(huì)繪制,實(shí)現(xiàn)很簡(jiǎn)單:
例如加一個(gè)透明度30%的紅色遮罩后的效果:
核心的實(shí)現(xiàn)邏輯就這些了,剩下的就是自定義屬性和方法了,有興趣的可以看源碼,都很簡(jiǎn)單,希望對(duì)你有所幫助吧!
更多細(xì)節(jié)及用法見GitHub:
如果你需要實(shí)現(xiàn)類似釘釘?shù)膱A形組合頭像,例如:
Android中經(jīng)常會(huì)遇到對(duì)圖片進(jìn)行二次處理,例如加圓角,或者顯示圓形圖片
通過第三方框架Glide實(shí)現(xiàn)圖片顯示有圓角,有三種寫法如下:
1.1、第一種實(shí)現(xiàn):
1.2、第二種實(shí)現(xiàn):
1.3、第三種實(shí)現(xiàn):
自定義ImageView:
對(duì)圖片進(jìn)行處理,此方法還可以加邊框
實(shí)現(xiàn)圓形和邊框:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助!
網(wǎng)站題目:android圓角,android圓角背景
文章來源:http://m.kartarina.com/article10/dseesgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、微信公眾號(hào)、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、網(wǎng)站營(yíng)銷、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)