zoukankan      html  css  js  c++  java
  • PorterDuffXfermode之PorterDuff.Mode.SRC_IN

    package com.loaderman.customviewdemo.view;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PorterDuff;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.RectF;
    import android.util.AttributeSet;
    import android.view.View;
    
    import com.loaderman.customviewdemo.R;
    
    
    public class InvertedImageView_SRCIN extends View {
        private Paint mBitPaint;
        private Bitmap BmpDST, BmpSRC, BmpRevert;
    
        public InvertedImageView_SRCIN(Context context, AttributeSet attrs) {
            super(context, attrs);
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            mBitPaint = new Paint();
            BmpDST = BitmapFactory.decodeResource(getResources(), R.drawable.dog_invert_shade, null);
            BmpSRC = BitmapFactory.decodeResource(getResources(), R.drawable.dog, null);
    
            Matrix matrix = new Matrix();
            matrix.setScale(1F, -1F);
            // 生成倒影图
            BmpRevert = Bitmap.createBitmap(BmpSRC, 0, 0, BmpSRC.getWidth(), BmpSRC.getHeight(), matrix, true);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            int width = getWidth() * 2 / 3;
            int height = width * BmpDST.getHeight() / BmpDST.getWidth();
    
            //先画出小狗图片
            canvas.drawBitmap(BmpSRC, null, new RectF(0, 0, width, height), mBitPaint);
    
            //再画出倒影
            canvas.save();
            canvas.translate(0, height);
    
            canvas.drawBitmap(BmpDST, null, new RectF(0, 0, width, height), mBitPaint);
            mBitPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
            canvas.drawBitmap(BmpRevert, null, new RectF(0, 0, width, height), mBitPaint);
    
            mBitPaint.setXfermode(null);
    
            canvas.restore();
        }
    }
      <com.loaderman.customviewdemo.view.InvertedImageView_SRCIN
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

    效果:

  • 相关阅读:
    Java闭包和回调
    Java通过字节分割字符串
    编译型语言和解释型语言的简单介绍
    对JavaScript事件处理程序/事件监听器的设定的简单介绍
    Linux netstat命令详解
    CentOS 7下iptables配置添加修改规则端口方法(转)
    设计模式
    设计模式
    Mysql8.0主从配置
    设计模式
  • 原文地址:https://www.cnblogs.com/loaderman/p/10215061.html
Copyright © 2011-2022 走看看