Android邊框裁切的正確姿勢實現(xiàn)示例
前言
今天寫什么呢,沒有太好的思路,就隨便寫一些細(xì)節(jié)的點吧。
平時我們都會接觸到的一個東西就是設(shè)置view的邊緣為圓角,因為默認(rèn)的直角比較難看,這個是涉及比較多的場景,其它當(dāng)然也有一些場景需用到非正常邊框的情況,也需要裁切。
1. 設(shè)置圓角邊框
一般我們怎么設(shè)置圓角邊框的
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffff" /> <stroke android:width="0.8dp" android:color="#ffffff" /> <corners android:radius="10dp" /> </shape>
這是我們比較常做的設(shè)置邊框圓角的操作,有沒有過這樣去設(shè)置會不會出問題?其實這樣的操作只不過是改變背景而已,它可能會出現(xiàn)內(nèi)部內(nèi)容穿透的效果。
2. 使用ClipToOutline進(jìn)行裁切
這個是android 5.0之后提出的方法,具體的操作是這樣
public static void setRoundRect(View view) { try { view.setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 10); } }); view.setClipToOutline(true); } catch (Exception e) { e.printStackTrace(); } }
可以看出就是調(diào)用了view的setOutlineProvider方法和setClipToOutline方法。看這個ViewOutlineProvider,它的注釋是
Interface by which a View builds its Outline, used for shadow casting and clipping.
能明顯看出它就是為了處理陰影和裁切的。其中我們要設(shè)置的話,主要是設(shè)置Outline outline這個對象,我們可以看看它所提供的方法
setRect
先隨便拿一張圖片表示原本的顯示效果來做對比
調(diào)用setRect給原圖進(jìn)行邊緣裁切
outline.setRect(view.getWidth()/4, view.getWidth()/4, view.getWidth()/4 *3, view.getHeight()/4 * 3);
得到這樣的效果,注意,我的原效果是貼邊的,這些裁切之后發(fā)現(xiàn)是不貼邊的
setRoundRect的效果和setRect一樣,就是多了一個參數(shù)用來設(shè)置圓角。這里就不演示了
setOval 調(diào)用setOval,它的傳參和setRect一樣
outline.setOval(view.getWidth()/4, view.getWidth()/4, view.getWidth()/4 *3, view.getHeight()/4 * 3);
可以看到效果
發(fā)現(xiàn)再裁切尺寸的同時并且把圖片切成圓形,我記得很早之前,還沒畢業(yè)時做圓形頭像的時候還需要引用別人的第三方,現(xiàn)在5.0之后直接調(diào)這個就行,多方便。當(dāng)然現(xiàn)在頭像都是用Glide來做。
setAlpha和setConvexPath也一樣,etAlpha是設(shè)置透明度,setConvexPath是設(shè)置路徑,路徑和自定義view一樣用Path,我這邊就不演示了
總結(jié)
Outline相對于shape來說,是真正的實現(xiàn)邊緣裁切的,shape其實只是設(shè)置背景而已,它的view的范圍還是那個正方形的范圍。最明顯的表現(xiàn)于,shape如果內(nèi)容填滿布局,會看到內(nèi)容超出圓角,而Outline不會。當(dāng)然如果你shape配合padding的話肯定也不會出現(xiàn)這種情況。
使用Outline也需要注意,一般的機子會在當(dāng)范圍超過圓之后,會一直顯示圓。比如你設(shè)置radius為50是圓角的效果,但是甚至成100已經(jīng)是整個邊是半圓,這時你設(shè)200會發(fā)現(xiàn)還是半圓,但是在某些機子上200會變成圓錐,所以如果要做半圓的效果也需要去計算好radius
以上就是Android邊框裁切的正確姿勢實現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于Android邊框裁切的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android FTP服務(wù)器上傳文件攻略(代碼詳解)
這篇文章主要介紹了Android FTP服務(wù)器上傳文件攻略,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Android實現(xiàn)為GridView添加邊框效果
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)為GridView添加邊框效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12Android實現(xiàn)發(fā)送短信驗證碼倒計時功能示例
本篇文章主要介紹了Android實現(xiàn)發(fā)送短信驗證碼倒計時功能示例,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-03-03Android的webview支持HTML5的離線應(yīng)用功能詳細(xì)配置
HTML5的離線應(yīng)用功能可以使得WebApp即使在網(wǎng)絡(luò)斷開的情況下仍能正常使用這是個非常有用的功能,但如何使Webivew支持HTML5離線應(yīng)用功能呢,需要的朋友可以參考下2012-12-12