一、fermode:是來自 transfer-modes,在畫筆中設置xfermode後,畫筆在使用的時候就會應用設置的像素轉換模式。就相似於ps中的選取功能,留下的選取是從原選區中去除仍是合併,取交仍是除去,就這麼回事。android
二、fermode相關類之間的繼承關係:canvas
三、直接繼承子類有AvoidXfermode(避免繪圖或者只在上邊繪製)、PixelXorfermode(與目標作xor操做)和PorterDuffXfermode(一下幾種模式)api
(1)使用xfermode,首先繪製的爲dest,後繪製的爲src。結果就是目標圖形以某種mode顯示在src上。spa
(2)不要忘記設置關閉硬件加速,以在api 16如下起做用。setLayerType(LAYER_TYPE_SOFTWARE, paint);code
四、小案例:blog
(1)一個空心圓效果。繼承
//目標 canvas.drawCircle(90, 90, 90, paint); //設置運算方式 paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.CLEAR)); //源 canvas.drawCircle(90, 90, 30, paint); //清除fermode paint.setXfermode(null);
首先繪製一個大圓,設置畫筆的與畫板的計算方式爲清除,而後繪製一個小圓,清除繪製mode,就出現一個空心圓效果。圖片
(2)將圖片處理爲原形圖片處理
//目標 canvas.drawCircle(90, 90, 90, paint); //設置運算方式 paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_IN)); //源 canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), 0, 0, paint); //清除fermode paint.setXfermode(null);