安卓 Paint 的 Xfermode

安卓在自定義 View 或寫獲取圓角或者圓形圖片工具的時候可能會用到這個畫筆模式掺栅,但是發(fā)現之前理解的有些不正確姜胖,所以記錄一下誉帅。目前只用到了兩種,所以先記錄一下這兩種的使用,即:

PorterDuff.Mode.SRC_IN 和 PorterDuff.Mode.DST_IN右莱,效果如下圖:

Mode 效果圖

DST是下層圖形蚜锨,SRC是上層圖形。這樣看來慢蜓,這兩種模式可以理解為上下兩層圖形的交集部分亚再,只不過是交集部分顯示的內容取決于上層還是下層內容的區(qū)別。DST_IN 內容取決于下層晨抡,SRC_IN 內容取決于上層氛悬。

下面來寫代碼看一下效果。

新建一個項目耘柱,布局放一個 ImageView 就可以了如捅,代碼如下:

//1.新建一個用于畫圖形的 bitmap 對象
Bitmap bitmap = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
//2.先畫一個紅色的矩形
paint.setColor(Color.RED);
canvas.drawRect(0, 0, bitmap.getWidth(), bitmap.getHeight(), paint);
paint.setColor(Color.YELLOW);
//3.設置模式,再畫一個黃色的圓
paint.setXfermode(
new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getHeight() / 2, paint);
//4. 將所畫內容設置到 ImageView 上顯示
iv1.setImageBitmap(bitmap);

代碼就這么多调煎,根據上面的說明镜遣,我們的預期可能是就顯示上層黃色的圓,因為交集部分就是圓的區(qū)域士袄,而顏色是取決于上層的悲关。但實際的效果并不是只顯示一個黃色的圓,如圖:

我們把模式改為 DST_IN娄柳,看會不會根據預期只顯示一個紅色的圓寓辱。但實際上并不是一個紅色的圓形,而是整個紅色的矩形赤拒。圖就不貼了秫筏。

這怎么都跟上面圖示的不一樣呢?怎么才能達到最上面說明的效果呢需了?我們來先畫圓試一下跳昼。代碼把上面畫矩形和畫圓的兩行對調一下就可以了。這時候圓是紅色的肋乍,矩形是黃色的了鹅颊。效果如下:

DST_IN

SRC_IN

我們看到這兩種情況是符合我們的預期的。

比較上面四種情況墓造,我們發(fā)現:

1.如果下層區(qū)域大于上層區(qū)域(即下層矩形堪伍,上層圓)锚烦,顯示圖形的大小肯定是矩形的區(qū)域,只不過上面圓形的顏色會根據設置模式不同一樣帝雇。只看到一個紅色舉行的情況其實只不過是交集部分的顏色也是紅色而已涮俄。

2.如果下層區(qū)域小于上層區(qū)域(即下層圓上層矩形),顯示圖形的區(qū)域肯定只是圓形的區(qū)域尸闸,顏色會根據模式模式的不同顯示的不同彻亲。

最后總結一波:

這兩種模式并不是只是顯示交集部分,而是兩層都會顯示的吮廉,顯示的區(qū)域由下層(即 DST 層)決定苞尝,交集部分由設置的模式決定。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末宦芦,一起剝皮案震驚了整個濱河市宙址,隨后出現的幾起案子,更是在濱河造成了極大的恐慌调卑,老刑警劉巖抡砂,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異恬涧,居然都是意外死亡注益,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門气破,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聊浅,“玉大人餐抢,你說我怎么就攤上這事现使。” “怎么了旷痕?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵碳锈,是天一觀的道長。 經常有香客問我欺抗,道長售碳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任绞呈,我火速辦了婚禮贸人,結果婚禮上,老公的妹妹穿的比我還像新娘佃声。我一直安慰自己艺智,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布圾亏。 她就那樣靜靜地躺著十拣,像睡著了一般封拧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夭问,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天泽西,我揣著相機與錄音,去河邊找鬼缰趋。 笑死捧杉,一個胖子當著我的面吹牛,可吹牛的內容都是我干的秘血。 我是一名探鬼主播糠溜,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼直撤!你這毒婦竟也來了非竿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤谋竖,失蹤者是張志新(化名)和其女友劉穎红柱,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體蓖乘,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡锤悄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了嘉抒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片零聚。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖些侍,靈堂內的尸體忽然破棺而出隶症,到底是詐尸還是另有隱情,我是刑警寧澤岗宣,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布蚂会,位于F島的核電站,受9級特大地震影響耗式,放射性物質發(fā)生泄漏胁住。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一刊咳、第九天 我趴在偏房一處隱蔽的房頂上張望彪见。 院中可真熱鬧,春花似錦娱挨、人聲如沸余指。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浪规。三九已至或听,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笋婿,已是汗流浹背誉裆。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缸濒,地道東北人足丢。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像庇配,于是被迫代替她去往敵國和親斩跌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容