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

    效果:

  • 相关阅读:
    struts传值方式ModelDriven的使用
    sql查询count 单独字段不同值
    图片-文件上传下载
    HTML 字符实体 &lt; &gt: &amp;等
    Validation failed for object='employee'. Error count: 1问题解决
    MySQL查询本周、上周、本月、上个月份数据的sql脚本
    React前端框架路由跳转,前端回车事件、禁止空格、提交方式等方法
    环境变量误删path找回方法与mysql基础命令
    树结构的控制
    数据库查询方法
  • 原文地址:https://www.cnblogs.com/loaderman/p/10215061.html
Copyright © 2011-2022 走看看