android xfermode绘图

一、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);
相关文章
相关标签/搜索