代码库/自定义View/刮刮乐(待改善)

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));


模式有:SRC_ATOP:不相交地方绘制目标图像,相交处绘制源图像,会受alpha影响。

       DST_ATOP:与上相反。

       XOR:不想交地方按原样绘制源图像和目标图像相交地方受alpha,颜色影响,都完全不透明,相交处不绘制,

        其他模式见纸面总结


代码

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.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * Created by YRC on 2017/10/22.
 */

public class XfermodeView extends View {
    Paint mPaint;
    Canvas canvas;
    Path   path;
    Bitmap downBitmap,upBitmap;

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

    public XfermodeView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    public XfermodeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView();
    }

    private void initView() {
        mPaint=new Paint();
        mPaint.setAlpha(0);
        mPaint.setStrokeWidth(50);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        //圆滑笔触
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        path=new Path();
        downBitmap= BitmapFactory.decodeResource(getResources(),R.drawable.test3);
        upBitmap=Bitmap.createBitmap(downBitmap.getWidth(),downBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        canvas=new Canvas(upBitmap);
        canvas.drawColor(Color.GRAY);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                path.reset();
                path.moveTo(event.getX(),event.getY());
                break;
            case MotionEvent.ACTION_MOVE:
                path.lineTo(event.getX(),event.getY());
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        canvas.drawPath(path,mPaint);
        invalidate();
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(downBitmap,0,0,null);
        canvas.drawBitmap(upBitmap,0,0,null);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值