android PorterDuffXfermode、PorterDuff.Mode 使用

首先看一下效果圖(來自ApiDemos/Graphics/XferModes)




從上面我們可以看到PorterDuff.Mode爲枚舉類,一共有16個枚舉值:

1.PorterDuff.Mode.CLEAR  

  所繪製不會提交到畫布上。
2.PorterDuff.Mode.SRC

   顯示上層繪製圖片
3.PorterDuff.Mode.DST

  顯示下層繪製圖片
4.PorterDuff.Mode.SRC_OVER

  正常繪製顯示,上下層繪製疊蓋。
5.PorterDuff.Mode.DST_OVER

  上下層都顯示。下層居上顯示。
6.PorterDuff.Mode.SRC_IN

   取兩層繪製交集。顯示上層。
7.PorterDuff.Mode.DST_IN

  取兩層繪製交集。顯示下層。
8.PorterDuff.Mode.SRC_OUT

 取上層繪製非交集部分。
9.PorterDuff.Mode.DST_OUT

 取下層繪製非交集部分。
10.PorterDuff.Mode.SRC_ATOP

 取下層非交集部分與上層交集部分
11.PorterDuff.Mode.DST_ATOP

 取上層非交集部分與下層交集部分
12.PorterDuff.Mode.XOR

  異或:去除兩圖層交集部分
13.PorterDuff.Mode.DARKEN

  取兩圖層全部區域,交集部分顏色加深
14.PorterDuff.Mode.LIGHTEN

  取兩圖層全部,點亮交集部分顏色
15.PorterDuff.Mode.MULTIPLY

  取兩圖層交集部分疊加後顏色
16.PorterDuff.Mode.SCREEN

  取兩圖層全部區域,交集部分變爲透明色



下面看下獲取圓角圖片的方法

/**
	 * 根據原圖和變長繪製圓形圖片
	 * 
	 * @param source
	 * @param min
	 * @return
	 */
	private Bitmap createCircleImage(Bitmap source, int min)
	{
		final Paint paint = new Paint();
		paint.setAntiAlias(true);
		Bitmap target = Bitmap.createBitmap(min, min, Config.ARGB_8888);
		/**
		 * 產生一個同樣大小的畫布
		 */
		Canvas canvas = new Canvas(target);
		/**
		 * 首先繪製圓形
		 */
		canvas.drawCircle(min / 2, min / 2, min / 2, paint);
		/**
		 * 使用SRC_IN
		 */
		paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
		/**
		 * 繪製圖片
		 */
		canvas.drawBitmap(source, 0, 0, paint);
		return target;
	}
核心代碼 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));這行代碼。

SRC_IN這種模式,兩個繪製的效果疊加後取交集展現後圖,怎麼說呢,咱們第一個繪製的是個圓形,第二個繪製的是個Bitmap,於是交集爲圓形,展現的是BItmap,就實現了圓形圖片效果。圓角,其實就是先繪製圓角矩形


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章