zoukankan      html  css  js  c++  java
  • PorterDuffXfermode之PorterDuff.Mode.XOR入门学习

    package com.loaderman.customviewdemo.view;
    
    import android.content.Context;
    import android.graphics.*;
    import android.util.AttributeSet;
    import android.view.View;
    
    
    public class PorterDuffXfermodeView extends View {
        private int width = 100;
        private int height = 100;
        private Bitmap dstBmp;
        private Bitmap srcBmp;
        private Paint mPaint;
    
        public PorterDuffXfermodeView(Context context, AttributeSet attrs) {
            super(context, attrs);
            setLayerType(LAYER_TYPE_SOFTWARE, null);
            dstBmp = makeDst(width, height);
            srcBmp = makeSrc(width, height);
            mPaint = new Paint();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.save();
            canvas.drawBitmap(dstBmp, 0,0 , mPaint);
            /*
            ADD,
            CLEAR,
            DARKEN,
            DST,
            DST_ATOP,
            DST_IN,
            DST_OUT,
            DST_OVER,
            LIGHTEN,
            MULTIPLY,
            OVERLAY,
            SCREEN,
            SRC,
            SRC_ATOP,
            SRC_IN,
            SRC_OUT,
            SRC_OVER,
            XOR;*/
            mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR));
            canvas.drawBitmap(srcBmp, width / 2, height / 2, mPaint);
            mPaint.setXfermode(null);
            canvas.restore();
        }
    
        private Bitmap makeDst(int w, int h) {
            Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
            Canvas c = new Canvas(bm);
            Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
            p.setColor(0xFFFFCC44);
            c.drawOval(new RectF(0, 0, w, h), p);
            return bm;
        }
    
        private Bitmap makeSrc(int w, int h) {
            Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
            Canvas c = new Canvas(bm);
            Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
            p.setColor(0xFF66AAFF);
            c.drawRect(0, 0, w, h, p);
            return bm;
        }
    }
    <com.loaderman.customviewdemo.view.PorterDuffXfermodeView
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

    效果:

  • 相关阅读:
    虚拟机NetworkAdapter三种方式的区别
    skia
    android gralloc是什么意思
    两个工作机会
    Ubuntu apt-get更新源替换及加速方法
    Vuforia和Metaio相继被收购,开发者们还有这些AR引擎可以选
    OpenCV 为啥勾搭上 OpenGL
    感受2万元的黑科技 微软MR头显HoloLens测评
    影创 我们的职位
    java基础-servlet-2:生命周期
  • 原文地址:https://www.cnblogs.com/loaderman/p/10214499.html
Copyright © 2011-2022 走看看