PorterDuffXfermode ——實現刮刮卡效果

利用PorterDuffXfermode實現,圖例如下旺遮,需要注意的是顿痪,PorterDuffXfermode設置的是兩個圖層交集區(qū)域的顯示方式,dst是先畫的圖形痛阻,src是后畫的圖形菌瘪。

這里寫圖片描述

其中最常用的就是通過DST_IN,SRC_IN模式來實現將一個矩形圖片編程圓角圖片或者圓形圖片的效果。先利用一個普通畫筆畫一個Mask遮罩層阱当,再用帶PorterDuffXfermode的畫筆講圖像畫在遮罩層上麻车,這樣就可以通過上面所說的效果來混合兩個圖像了缀皱。

 mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.test);
   mOut = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(mOut);
   paint = new Paint();
    paint.setAntiAlias(true);
    canvas.drawRoundRect(0, 0, mBitmap.getWidth(), mBitmap.getHeight(), 80, 80, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(mBitmap,0,0,paint);

下面實現刮刮卡效果斗这,如下圖


這里寫圖片描述

完整代碼如下:

package com.example.administrator.myapplication;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * Created by Administrator on 2015/11/25 0025.
 */
public class XfermodeView extends View {

    Bitmap mBgBitmap,mFgBitmap;
    Paint mPaint;
    Canvas mCanvas;
    Path mPath;

    public XfermodeView(Context context) {
        super(context);
        init();
    }

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

/*
*   讓它的筆觸和連接處能更加圓滑一點动猬,即Paint.Join.ROUND和Paint.Cap.ROUND屬性
*   最關鍵的一步是:需要將畫筆的透明度設置為0,這樣才能顯示出擦除的效果表箭,因為在使用PorterDuffXfermode進行圖層混合時赁咙,并不是簡單地進行圖層的計算,同時也會去計算透明度通道的值
*
*/
    private void init() {
        mPaint = new Paint();
        mPaint.setAlpha(0);
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeWidth(50);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPath = new Path();
        mBgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.test);
        mFgBitmap = Bitmap.createBitmap(mBgBitmap.getWidth(), mBgBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mFgBitmap);
        mCanvas.drawColor(Color.GRAY);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        mPath.reset();
                        mPath.moveTo(event.getX(),event.getY());
                        break;
                    case MotionEvent.ACTION_MOVE:
                        mPath.lineTo(event.getX(),event.getY());
                        break;
                }

        mCanvas.drawPath(mPath, mPaint);
        invalidate();
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
            canvas.drawBitmap(mBgBitmap,0,0,null);
            canvas.drawBitmap(mFgBitmap,0,0,null);

    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末免钻,一起剝皮案震驚了整個濱河市彼水,隨后出現的幾起案子,更是在濱河造成了極大的恐慌极舔,老刑警劉巖凤覆,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異拆魏,居然都是意外死亡盯桦,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門渤刃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拥峦,“玉大人,你說我怎么就攤上這事卖子÷院牛” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵洋闽,是天一觀的道長玄柠。 經常有香客問我,道長诫舅,這世上最難降的妖魔是什么羽利? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮骚勘,結果婚禮上铐伴,老公的妹妹穿的比我還像新娘。我一直安慰自己俏讹,他們只是感情好当宴,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泽疆,像睡著了一般户矢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殉疼,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天梯浪,我揣著相機與錄音捌年,去河邊找鬼。 笑死挂洛,一個胖子當著我的面吹牛礼预,可吹牛的內容都是我干的。 我是一名探鬼主播虏劲,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼托酸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柒巫?” 一聲冷哼從身側響起励堡,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堡掏,沒想到半個月后应结,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡泉唁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年鹅龄,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片游两。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡砾层,死狀恐怖,靈堂內的尸體忽然破棺而出贱案,到底是詐尸還是另有隱情肛炮,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布宝踪,位于F島的核電站侨糟,受9級特大地震影響,放射性物質發(fā)生泄漏瘩燥。R本人自食惡果不足惜秕重,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厉膀。 院中可真熱鬧溶耘,春花似錦、人聲如沸服鹅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽企软。三九已至庐扫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背形庭。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工铅辞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萨醒。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓斟珊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親验靡。 傳聞我的和親對象是個殘疾皇子倍宾,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容