當前位置:首頁 » 安卓系統 » android裁剪圓形圖片

android裁剪圓形圖片

發布時間: 2025-01-26 09:05:56

⑴ Android 圓角、圓形 ImageView 實現

我們要實現的圖片控制項繼承自 AppCompatImageView ,它是 ImageView 的子類,但提供了更好的兼容性,我們在此基礎上添加了若干自定義的屬性和方法以實現最終的 NiceImageView :

要實圓角或者圓形的顯示效果,就是對圖片顯示的內容區域進行「裁剪」,只顯示指定的區域即可。如何做呢?

一種比較直接的辦法是這樣的,由於圖片是被繪制在畫布上的,所以用 canvas 的 clipPath() 方法先將畫布裁剪成指定形狀,這樣就能讓圖片按指定形狀顯示了,重新 draw() 方法即可:

這樣使用 src 、 background 屬性給ImageView設置顯示的圖片都能達到預期的顯示效果。但是由於 clipPath() 方法不支持抗鋸齒,圖片邊緣會有明顯的毛糙感,體驗並不理想,所以需要尋找其它方法。

另一種方法是使用圖像的 Alpha 合成模式 ,即
PorterDuff 來實現, 官方文檔 。這里我們使用其中的 DST_IN 模式。整個過程就是先繪制目標圖像,也就是圖片;再繪制原圖像,即一個圓角矩形或者圓形,這樣最終目標圖像只顯示和原圖像重合的區域。

到這里就實現了顯示為圓角或者圓形了。但是需要通過 src 屬性或者對應的方法來設置圖片,否則不能達到預期效果。

繪制邊框就相對容易理解了,只需要繪制一個指定樣式的圓角矩形或者圓形即可:

當圖片顯示為圓形時,還可以繪制一個內邊框,但圓角矩形的話由於圓角大小的問題,目前只能設置一個邊框咯。

但是有個問題,繪制的邊框會覆蓋在圖片上,如果邊框太寬會導致圖片的可見區域變小了,影像顯示效果,像這樣,左下角的花盆不見了:

那麼如何讓邊框不覆蓋在圖片上呢?可以在 Alpha 合成繪制前先將畫布縮小一定比例,最後再繪制邊框,這樣問題就解決了。

縮放後的ImageView顯示區域的寬高就是原寬、高分別減去2倍的邊框寬度,這樣縮小的比例也就顯而易見了。效果如下,左下角的花盆出來了:

遮罩可以理解為一層帶透明度的顏色,遮罩默認不繪制,當制定了遮罩顏色時才會繪制,實現很簡單:

例如加一個透明度30%的紅色遮罩後的效果:

核心的實現邏輯就這些了,剩下的就是自定義屬性和方法了,有興趣的可以看源碼,都很簡單,希望對你有所幫助吧!

更多細節及用法見GitHub: https://github.com/SheHuan/NiceImageView

如果你需要實現類似釘釘的圓形組合頭像,例如:

⑵ android中怎麼繪制這種圓形布局

圓形是個背景,可以通過xml定義背景圖片
在res/drawable/下添加背景xml,test.xml代碼如下

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item >

<shape android:shape="oval">

<padding android:top="2dp" android:right="2dp" android:bottom="2dp" android:left="2dp" />

<solid android:color="#00a0eb"/>

</shape>

</item>

<item >

<shape android:shape="oval">

<solid android:color="#ffffffff"/>

</shape>

</item>

</layer-list>

然後在layout下添加布局文件

代碼如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="indi.zcm.dropdown.MainActivity" >



<RelativeLayout

android:layout_width="100dp"

android:layout_height="100dp"

android:background="@drawable/test">


<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"

android:layout_marginTop="27dp"

android:text="購買人數" />


<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"

android:layout_marginTop="45dp"

android:textSize="26sp"

android:text="32514" />

</RelativeLayout>

</RelativeLayout>

這個應該就是你要的效果

⑶ android 開發 imgview 怎麼弄成圓形

imageview的屬性中可以加入background來定義它的背景,將背景定義成一個圓形的drawable就可以了。
另一種辦法,也可以自己定義一個view來顯示圓形的圖片,你可以參考http://blog.csdn.net/alan_biao/article/details/17379925來進行設計。

⑷ 手機如何把照片做成圓形

使用手機把照片做成圓形的基或尺方式,可以通過使用美圖秀秀進行實現,讓我來具體演搏高示怎麼進行操作:

(參考環境: 手機型號:OPPOK9, 手機系統:Android11 ,ColorOSV11.1 APP版本:美圖秀秀9.8)

1.打開手機里的美圖秀秀後,點擊【圖片美化】。

這就是手機照片做成的圓形方法,如果還有更加便捷的方式,歡迎評論框留言交流😄。

⑸ android 開發中獲取sd卡或照相機的照片怎樣裁剪呈圓形

需要用到類似QQ頭像選擇的一個功能,讓用戶從手機圖片或者自己拍照並圖圖像大小剪裁之後選擇,當時覺得很實用,但是自己不知道怎麼實現。
最近參考同事寫的代碼並自己在網上查閱了相關信息,發現大概都是同樣的方式,自己簡單整合了一下,可以實現基本的功能,至於上傳方面還沒有深入研究。

熱點內容
手機軟體卸載緩存 發布:2025-01-27 09:27:54 瀏覽:38
aspnet圖片緩存 發布:2025-01-27 09:24:10 瀏覽:222
資料庫原理與應用第二版答案 發布:2025-01-27 09:22:43 瀏覽:330
劍魂封仙腳本 發布:2025-01-27 09:09:46 瀏覽:594
ios移除密碼是什麼原因 發布:2025-01-27 09:01:52 瀏覽:545
九陰真經拉鏢腳本 發布:2025-01-27 08:55:04 瀏覽:842
vc界面源碼 發布:2025-01-27 08:45:54 瀏覽:857
資料庫外健 發布:2025-01-27 08:40:50 瀏覽:806
安卓系統怎麼微信多開 發布:2025-01-27 08:40:43 瀏覽:831
兩年java 發布:2025-01-27 08:26:32 瀏覽:827