欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android邊框裁切的正確姿勢(shì)實(shí)現(xiàn)示例

 更新時(shí)間:2023年02月16日 14:44:18   作者:流浪漢kylin  
這篇文章主要為大家介紹了Android邊框裁切的正確姿勢(shì)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jì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)文章

最新評(píng)論