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基礎(chǔ)總結(jié)篇之一:Activity生命周期
本篇文章主要介紹了android基礎(chǔ)總結(jié)篇之一:Activity生命周期,想要學(xué)習(xí)的可以了解一下。2016-11-11
Android ListView列表控件的介紹和性能優(yōu)化
這篇文章主要介紹了Android ListView列表控件的介紹和性能優(yōu)化,需要的朋友可以參考下2017-06-06
Android自定義AvatarImageView實現(xiàn)頭像顯示效果
這篇文章主要為大家詳細(xì)介紹了Android自定義AvatarImageView實現(xiàn)頭像顯示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09
Android7.0上某些PopuWindow出現(xiàn)顯示位置不正確問題的解決方法
這篇文章主要介紹了Android7.0上某些PopuWindow出現(xiàn)顯示位置不正確問題的解決方法,涉及針對Android7.0中PopuWindow屬性與方法的相關(guān)設(shè)置技巧,需要的朋友可以參考下2017-10-10
Android中CountDownTimer倒計時器用法實例
這篇文章主要介紹了Android中CountDownTimer倒計時器用法,以實例形式分析了Android中CountDownTimer類的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10

