在android開發過程中,控制項的使用是最常見、最基本的。但是我們都知道,在android中的控制項都是矩形的,而在實際專案中,我們的ui設計師經常會使用一些圓角的控制項。那麼,在android有哪些方式可以實現圓角控制項了,在使用和適配的過程當中,又有哪些問題了。下面,我將介紹android中常見的實現圓角方式。
自定義方式實現圓角:
使用背景
使用shape方式
使用cardview控制項
使用viewoutlineprovider裁剪view
使用自定義控制項
使用canvas 的 clip***() 系列方法
通過自定義 drawable 實現
有圓角的設計時,讓設計師給我們一張圓角背景的切圖,然後將圓角切圖作為控制項的背景設定上去,那麼控制項在顯示時就成圓角了;但是使用這種方式時,不同的圓角大小、四個角中可能並不是都有圓角或者圓角大小不一樣時,需要動態修改背景時,都需要使用不同的,並且每次調整都需要重新切圖和替換,那麼設計師的工作量就大了很多,而且apk的體積就會增大很多。所以在實際中基本上不使用這種方式實現圓角,也不推薦使用。
使用shape的方式實現圓角,這應該是我們在平時使用的最多的一種方式了,通過乙個xml檔案實現,然後直接將這個xml檔案作為控制項的背景即可。
<?xml version="1.0" encoding="utf-8"?>
通過以上方式我們就實現了乙個背景為紅色、四個圓角都為5dp的圓角背景圖,然後直接將這個檔案作為android:background
的屬性值即可。這種方式在建立和使用的過程都很簡單;而且占用的空間也很小,在實際的專案中使用很普遍(shape還有其他的很多屬性、包括邊框、漸變等)。但是,通過shape的方式實現圓角也有這一些問題,就是對於不同的背景顏色、圓角大小、四個角圓角不一致時,需要定義多個shape檔案,而且在有多人開發並且專案沒有很好的規範時,可能還會導致同一種背景樣式的shape被重複建立;甚至同乙個人對於同一種型別的shape都重複建立,從而導致shape檔案很多,而且很混亂,不好維護與管理。所以在使用這種方式的時候一定需要有乙個規範,並且需要每乙個開發者都嚴格按照規範來。cardview 是在android5.0推出的乙個控制項(在使用時需要新增依賴),繼承自framelayout,可以讓我們使用類似卡片布局來顯示一致性效果的內容。同時卡片還可以包含圓角和陰影效果。
cardview 控制項屬性:
陰影:在android5.0及以上設定控制項陰影可以通過elevation
屬性或者translationz
屬性控制。(elevation 是靜態值,是view在z軸上的初始值;translationz是動態值,是z上的偏移變化。z軸陰影: z = elevation + translationz)
使用cardview實現控制項圓角,因為cardview繼承至framelayout,所以作為直接父布局時只能實現相對簡單的樣式,而如果我們需要實現類似 relativelayout 的布局話,那麼我們還是只能使用 relativelayout ,然後將cardview巢狀在外面;另外直接使用cardview,是無法單獨指定某個或兩個角是直角,其他是圓角的。
在android5.0及以上系統,實現圓角我們又多了一種方式,那就是使用 viewoutlineprovider 的方式,這種方式通過**指定我們的控制項形狀,基本用法;
view.setcliptooutline(true);
view.setoutlineprovider(new viewoutlineprovider()
});
通過outline.setroundrect()
方法,我們將控制項設定成圓角,outline
還有其他的方法setrect()
、setoval()
、setconvexpath()
方法指定不同的形狀,通過setconvexpath()
我們還可以指定乙個凸路徑(convexpath 這裡簡單理解為 圓角矩形的圓角度數大於矩形的高度或寬度(上下圓角度數的邊長和大於高度或者左右圓角度數的邊長大於高度,那麼就不是 convexpath 了))。在android5.0以上使用這種方式實現圓角也是可以的。但是使用這種方式也有一些缺點,就是必須是android5.0以上系統,另外一點就是需要在**中進行設定,不能在xml檔案中指定。通過自定義控制項的方式實現圓角或者其他的形狀,使用這種方式靈活性高,沒有版本限制。但是他最為明顯的缺點就是需要自己實現自定義控制項,起初階段比較麻煩。而通過自定義控制項實現也有多種方式,這裡我主要介紹兩種:裁剪畫布和通過自定義drawable作為控制項背景形式。 android 繪製控制項圓角邊框
在開發的過程中有時候需要把控制項做出圓角邊框的樣子,下發介紹繪製的方法 首先,在res下面新建乙個資料夾drawable,在drawable下面新建三個xml檔案 shape corner down.xml shape corner up.xml和shape corner.xml,分別是下面兩個角是...
android實現邊框圓角
1.在drawable 下新建 shape.xml 檔案 xml android radius為角的弧度,值越大角越圓。我們還可以把四個角設定成不同的角度,方法為 2.1設定成0dp無效,2.1以上版本可以,如果無效的話那就只能設成1dp了。2.設定引用 android background dra...
Android實現圓角邊框
設定邊框圓角可以在drawable mdpi目錄裡定義乙個xml 000000 10dp android toprightradius 10dp android bottomrightradius 10dp android bottomleftradius 10dp 解釋 solid的表示填充顏色,...