開源啦·開源啦 Android 超炫酷 超好用 的 裁切布局 一個布局搞定所有裁切
你遇到過怎樣的圖片裁切需求?
1. 圓角矩形

2. 帶邊框的圓角矩形

3. 圓形

4. 帶邊框的圓形

你又遇到過怎樣奇怪的布局需求?
1. 異形布局

2. 陰陽布局

3. 還是心形布局

所有這些,都可以用一個ClipLayout布局搞定
更重要的是
它會根據透明通道,重新調度觸摸事件,所以事件會符合物理現象的進行圖層穿透
請看展示效果

它不止是裁切圖片的利器,也是裁切布局的利器
例如:上圖中心形布局中的scrollview已經被自動裁切,即便滑動,也不影響裁切效果
陰陽布局的旋轉程序,也沒有因為旋轉而忘記點擊事件的重新分配
這么好的東西,會不會很難用呢?
當然不會啦,請看帶邊框圓形圖片的布局代碼

Include_circle_border.xml
<com.sens.widget.ClipLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="64dp"
android:layout_height="64dp">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/oval" />
<com.sens.widget.ClipMask
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:background="@drawable/oval" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:src="@drawable/sens" />
</com.sens.widget.ClipLayout>
第一層的oval是白色的圓形shape
第二層的mask同樣使用oval作為模版
第三層的image是正常的影像
通過上面的代碼,想必你已經看出來了,ClipLayout整體分為三層結構:
ClipLayout就是裁切的舞臺(它負責所有裁切任務的調度),ClipMask就是裁切的模版,當然了 ClipLayout也可以包含多個ClipMask,但是ClipMask必需是ClipLayout的直接子View,否則它們的效果和FrameLayout無異,
沒有ClipMask的ClipLayout和FrameLayout的效果沒有差異,因為它們均繼承自FrameLayout,更復雜的模版和布局,寫在它們的xml內部即可,
到這里想必你已經明白了:
ClipMask是裁切模版,只取透明通道,ClipMask默認對ClipMask之下的視圖(即背景層)執行打洞操作,默認對ClipMask上層(即內容層)執行切割操作
當然了,默認行為是可以隨時修改的
你可以通過修改ClipLayout 中的isReversal屬性動態的使它的裁切效果反向,
即:如果 isReversal == true (默認false) 那么
ClipMask對ClipMask之下的視圖(即背景層)執行切割操作,對ClipMask上層(即內容層)執行打洞操作
講到這里,請問:這么好的東西,會不會有兼容問題呢?
好訊息是,ClipLayout 向下兼容至安卓2.3.7 向上兼容至安卓12.0 是的,它不存在兼容問題,放心用
那這么好的東西,會不會增加專案的重量呢?
它的代碼不足200行,
200行你用不了吃虧,也用不了上當,走過路過,點贊收藏+關注,
如果你想了解更多的實作原理,可直奔gay站看代碼,也可以給我留言,
下面是一個使用ClipLayout制作的綜合樣例,喜歡請掃碼進入gay站吧,

專案地址:請前往gay站
體驗APK:點擊下載
jar包:點擊下載
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/382020.html
標籤:其他
上一篇:UI繪制流程之測量流程
下一篇:移動開發——第九章章節自測
