Android邊框裁切的正確姿勢(shì)實(shí)現(xiàn)示例
前言
今天寫(xiě)什么呢,沒(méi)有太好的思路,就隨便寫(xiě)一些細(xì)節(jié)的點(diǎn)吧。
平時(shí)我們都會(huì)接觸到的一個(gè)東西就是設(shè)置view的邊緣為圓角,因?yàn)槟J(rèn)的直角比較難看,這個(gè)是涉及比較多的場(chǎng)景,其它當(dāng)然也有一些場(chǎng)景需用到非正常邊框的情況,也需要裁切。
1. 設(shè)置圓角邊框
一般我們?cè)趺丛O(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è)置邊框圓角的操作,有沒(méi)有過(guò)這樣去設(shè)置會(huì)不會(huì)出問(wèn)題?其實(shí)這樣的操作只不過(guò)是改變背景而已,它可能會(huì)出現(xiàn)內(nèi)部?jī)?nèi)容穿透的效果。
2. 使用ClipToOutline進(jìn)行裁切
這個(gè)是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方法??催@個(gè)ViewOutlineProvider,它的注釋是
Interface by which a View builds its Outline, used for shadow casting and clipping.
能明顯看出它就是為了處理陰影和裁切的。其中我們要設(shè)置的話,主要是設(shè)置Outline outline這個(gè)對(duì)象,我們可以看看它所提供的方法
setRect
先隨便拿一張圖片表示原本的顯示效果來(lái)做對(duì)比
調(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一樣,就是多了一個(gè)參數(shù)用來(lái)設(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)再裁切尺寸的同時(shí)并且把圖片切成圓形,我記得很早之前,還沒(méi)畢業(yè)時(shí)做圓形頭像的時(shí)候還需要引用別人的第三方,現(xiàn)在5.0之后直接調(diào)這個(gè)就行,多方便。當(dāng)然現(xiàn)在頭像都是用Glide來(lái)做。
setAlpha和setConvexPath也一樣,etAlpha是設(shè)置透明度,setConvexPath是設(shè)置路徑,路徑和自定義view一樣用Path,我這邊就不演示了
總結(jié)
Outline相對(duì)于shape來(lái)說(shuō),是真正的實(shí)現(xiàn)邊緣裁切的,shape其實(shí)只是設(shè)置背景而已,它的view的范圍還是那個(gè)正方形的范圍。最明顯的表現(xiàn)于,shape如果內(nèi)容填滿布局,會(huì)看到內(nèi)容超出圓角,而Outline不會(huì)。當(dāng)然如果你shape配合padding的話肯定也不會(huì)出現(xiàn)這種情況。
使用Outline也需要注意,一般的機(jī)子會(huì)在當(dāng)范圍超過(guò)圓之后,會(huì)一直顯示圓。比如你設(shè)置radius為50是圓角的效果,但是甚至成100已經(jīng)是整個(gè)邊是半圓,這時(shí)你設(shè)200會(huì)發(fā)現(xiàn)還是半圓,但是在某些機(jī)子上200會(huì)變成圓錐,所以如果要做半圓的效果也需要去計(jì)算好radius
以上就是Android邊框裁切的正確姿勢(shì)實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于Android邊框裁切的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android 音樂(lè)播放器的開(kāi)發(fā)實(shí)例詳解
本文主要講解Android 音樂(lè)播放器的開(kāi)發(fā),這里給大家提供一個(gè)簡(jiǎn)單的示例代碼,和實(shí)現(xiàn)效果圖,有需要開(kāi)發(fā)音樂(lè)播放器的朋友可以參考下2016-08-08Android FTP服務(wù)器上傳文件攻略(代碼詳解)
這篇文章主要介紹了Android FTP服務(wù)器上傳文件攻略,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Android實(shí)現(xiàn)為GridView添加邊框效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)為GridView添加邊框效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼倒計(jì)時(shí)功能示例
本篇文章主要介紹了Android實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼倒計(jì)時(shí)功能示例,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-03-03Android快速實(shí)現(xiàn)無(wú)預(yù)覽拍照功能
這篇文章主要為大家詳細(xì)介紹了Android快速實(shí)現(xiàn)無(wú)預(yù)覽拍照功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06Android實(shí)現(xiàn)截圖分享qq 微信功能
在日常生活中,經(jīng)常用到qq,微信截圖分享功能,今天小編通過(guò)本文給大家介紹Android實(shí)現(xiàn)截圖分享qq 微信功能,具體實(shí)現(xiàn)代碼大家參考下本文2017-12-12Android實(shí)現(xiàn)拍照、選擇相冊(cè)圖片并裁剪功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)拍照、選擇相冊(cè)圖片并裁剪功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12Android的webview支持HTML5的離線應(yīng)用功能詳細(xì)配置
HTML5的離線應(yīng)用功能可以使得WebApp即使在網(wǎng)絡(luò)斷開(kāi)的情況下仍能正常使用這是個(gè)非常有用的功能,但如何使Webivew支持HTML5離線應(yīng)用功能呢,需要的朋友可以參考下2012-12-12