Android Paint API之—— Xfermode與PorterDuff詳解(一)

2023-03-31 14:20 更新

本節(jié)引言:

不知道標(biāo)題這兩個(gè)玩意你熟不熟悉啦,如果自己實(shí)現(xiàn)過圓角或者圓形圖片,相信對(duì)這兩個(gè)名詞 并不模式,一時(shí)半伙沒想起來?沒關(guān)系,下面這個(gè)圖你可曾見過?



模式2:AvoidXfermode.Mode.AVOID

和上面的TARGET模式相反,上面是顏色一樣才改變顏色,這里是顏色不一樣反而改變顏色, 而容差值同樣帶來相反的結(jié)果,容差值為0時(shí),只有當(dāng)圖片中的像素顏色值與設(shè)置的顏色值完全不一樣 的時(shí)候才會(huì)被染色,而當(dāng)容差值達(dá)到最大值255的時(shí)候,稍微有一點(diǎn)顏色不一樣就會(huì)被染色! 我們只需簡(jiǎn)單的修改上面的例子就可以了,同一是修改下構(gòu)造AvoidXfermode的內(nèi)容! 我們改成下面這句:

avoidXfermode = new AvoidXfermode(0XFFD9E5F3,230, AvoidXfermode.Mode.AVOID);

運(yùn)行效果圖


二兒子:PixelXorXfermode

這個(gè)則是另一種圖像混排模式,比起大兒子更簡(jiǎn)單,他的構(gòu)造方法如下:

官方API文檔:PixelXorXfermode

參數(shù)解析:

就一個(gè)16進(jìn)制帶透明值得顏色值,至于這個(gè)值的作用,是有一個(gè)算法的: PixelXorXfermode內(nèi)部是按照" opColor ^ src ^ dst "這個(gè)異或算法運(yùn)算的, 得到一個(gè)不透明的(alpha = 255)的色彩值,設(shè)置到圖像中!好吧,這是網(wǎng)上搜的 具體我也不知道,寫個(gè)例子試試效果唄~

代碼示例

運(yùn)行效果圖

實(shí)現(xiàn)代碼

/**
 * Created by Jay on 2015/10/22 0022.
 */
public class PixelXorXfermodeView1 extends View{

    private Paint mPaint;
    private Bitmap mBitmap;
    private PixelXorXfermode pixelxorXfermode;

    public PixelXorXfermodeView1(Context context) {
        super(context);
        init();

    }

    public PixelXorXfermodeView1(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public PixelXorXfermodeView1(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  //抗鋸齒
        pixelxorXfermode = new PixelXorXfermode(0XFFD9E5F3);
        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.iv_meizi);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(mBitmap, 50, 50, mPaint);
        mPaint.setARGB(255, 222, 83, 71);
        mPaint.setXfermode(pixelxorXfermode);
        canvas.drawRect(50, 50, 690, 1010, mPaint);
    }

}

本節(jié)示例代碼下載:

XfermodeDemo.zip


本節(jié)小結(jié):

好吧,滿滿的罪惡感,很漂亮的一個(gè)妹子,結(jié)果給我寫demo寫成了這個(gè)樣子,別怪我, 


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)