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" />

    效果:

  • 相关阅读:
    python 适配器
    python 装饰器
    实测 《Tensorflow实例:利用LSTM预测股票每日最高价(二)》的结果
    TFRecord 存入图像和标签
    TFRecord 读取图像和标签
    CONDA常用命令
    sotfmax的通俗理解
    sigmoid的通俗理解
    查看日志,定位错误_常用的操作
    工作中Git实操详解_看完这篇直接上手!
  • 原文地址:https://www.cnblogs.com/loaderman/p/10214499.html
Copyright © 2011-2022 走看看