可以使用自定義控件顯示圓角效果,或者使用style
創(chuàng)新互聯(lián)專注于萬柏林網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供萬柏林營銷型網(wǎng)站建設(shè),萬柏林網(wǎng)站制作、萬柏林網(wǎng)頁設(shè)計、萬柏林網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造萬柏林網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供萬柏林網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
設(shè)置shape,最直接的就是直接使用圓角圖片,參考資料:,望采納,謝謝。
Android中經(jīng)常會遇到對圖片進行二次處理,例如加圓角,或者顯示圓形圖片
通過第三方框架Glide實現(xiàn)圖片顯示有圓角,有三種寫法如下:
1.1、第一種實現(xiàn):
1.2、第二種實現(xiàn):
1.3、第三種實現(xiàn):
自定義ImageView:
對圖片進行處理,此方法還可以加邊框
實現(xiàn)圓形和邊框:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助!
方法一:使用框架?CircleImageView,這是直接使用圓形/圓角的ImageView
方法二:使用圖片加載框架?Glide,這是使用正常的ImageView,在加載圖片的時候進行圓形/圓角處理。
GlideApp.with(this).load("").circleCrop().into(imageView)
GlideApp.with(this).load("").transform(new?GlideRoundTransform(context,?10)).into(imageView)
一、 參考glide的實現(xiàn)方法
通過RoundedCorners的Transfromation進行圓角實現(xiàn),在TransformationUtil中通過BitmapShader來設(shè)置Paint,然后canvas.drawRect來實現(xiàn)。
二、項目中的實現(xiàn)方案
計算四個角的path來canvas.drawPath,這樣實現(xiàn)起來不公麻煩,而且會影響黑暗模式的適配
我們要實現(xiàn)的圖片控件繼承自 AppCompatImageView ,它是 ImageView 的子類,但提供了更好的兼容性,我們在此基礎(chǔ)上添加了若干自定義的屬性和方法以實現(xiàn)最終的 NiceImageView :
要實圓角或者圓形的顯示效果,就是對圖片顯示的內(nèi)容區(qū)域進行“裁剪”,只顯示指定的區(qū)域即可。如何做呢?
一種比較直接的辦法是這樣的,由于圖片是被繪制在畫布上的,所以用 canvas 的 clipPath() 方法先將畫布裁剪成指定形狀,這樣就能讓圖片按指定形狀顯示了,重新 draw() 方法即可:
這樣使用 src 、 background 屬性給ImageView設(shè)置顯示的圖片都能達到預(yù)期的顯示效果。但是由于 clipPath() 方法不支持抗鋸齒,圖片邊緣會有明顯的毛糙感,體驗并不理想,所以需要尋找其它方法。
另一種方法是使用圖像的 Alpha 合成模式 ,即
PorterDuff 來實現(xiàn), 官方文檔 。這里我們使用其中的 DST_IN 模式。整個過程就是先繪制目標圖像,也就是圖片;再繪制原圖像,即一個圓角矩形或者圓形,這樣最終目標圖像只顯示和原圖像重合的區(qū)域。
到這里就實現(xiàn)了顯示為圓角或者圓形了。但是需要通過 src 屬性或者對應(yīng)的方法來設(shè)置圖片,否則不能達到預(yù)期效果。
繪制邊框就相對容易理解了,只需要繪制一個指定樣式的圓角矩形或者圓形即可:
當圖片顯示為圓形時,還可以繪制一個內(nèi)邊框,但圓角矩形的話由于圓角大小的問題,目前只能設(shè)置一個邊框咯。
但是有個問題,繪制的邊框會覆蓋在圖片上,如果邊框太寬會導(dǎo)致圖片的可見區(qū)域變小了,影像顯示效果,像這樣,左下角的花盆不見了:
那么如何讓邊框不覆蓋在圖片上呢?可以在 Alpha 合成繪制前先將畫布縮小一定比例,最后再繪制邊框,這樣問題就解決了。
縮放后的ImageView顯示區(qū)域的寬高就是原寬、高分別減去2倍的邊框?qū)挾?,這樣縮小的比例也就顯而易見了。效果如下,左下角的花盆出來了:
遮罩可以理解為一層帶透明度的顏色,遮罩默認不繪制,當制定了遮罩顏色時才會繪制,實現(xiàn)很簡單:
例如加一個透明度30%的紅色遮罩后的效果:
核心的實現(xiàn)邏輯就這些了,剩下的就是自定義屬性和方法了,有興趣的可以看源碼,都很簡單,希望對你有所幫助吧!
更多細節(jié)及用法見GitHub:
如果你需要實現(xiàn)類似釘釘?shù)膱A形組合頭像,例如:
使用databinding設(shè)置圓角背景,代替drawable方式
注意:這個只是設(shè)置一個背景,所有圖片的圓角不能使用它,只能是viewGroup或者TextView。
提示:圖片可以使用QMUIRadiusImageView
1、支持view和viewGroup的圓角,邊框、和單個圓角等;
2、app:bgRadius:圓角大小,必須用"@{R.dimen.ui_dp8}"賦值;
3、app:bgSolidColor:設(shè)置背景色;
4、app:bgStrokeColor:設(shè)置邊框顏色;
5、bgTopLeftRadius:設(shè)置左上的圓角;
當前名稱:android圓角,Android圓角半徑
當前地址:http://jinyejixie.com/article32/dsecipc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、面包屑導(dǎo)航、網(wǎng)站排名、網(wǎng)站策劃、響應(yīng)式網(wǎng)站、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容