zoukankan      html  css  js  c++  java
  • 制作一个半透明遮罩层的库——TipView

    效果图

    知识点

    要实现这个自定义ViewGroup,需要知道几点知识:

    public class TipView extends RelativeLayout {
    
        public TipView(Context context) {
            super(context);
    
            /*
             * let ViewGroup to invoke onDraw() method,
             * also, you can override dispatchDraw() method instead of override onDraw() method 
             */
            setWillNotDraw(false);
            
            mMaskPaint = new Paint();
            mMaskPaint.setColor(0xC8000000);
    
            mTransparentPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mTransparentPaint.setColor(Color.TRANSPARENT);
            mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
            mTransparentPaint.setXfermode(mPorterDuffXfermode);
    
            mSystemCanvasPaint = new Paint();
        }
    
        private Bitmap mMaskBitmap;
        private Canvas mMaskCanvas;
        private Paint mMaskPaint;
    
        private Paint mTransparentPaint;
        private PorterDuffXfermode mPorterDuffXfermode;
    
        private Paint mSystemCanvasPaint;
    
        @Override
        protected void onDraw(Canvas systemCanvas) {
            super.onDraw(systemCanvas);
    
            // 绘制遮罩层
            if (mMaskBitmap == null) {
                mMaskBitmap = Bitmap.createBitmap(systemCanvas.getWidth(), systemCanvas.getHeight(), Bitmap.Config.ARGB_8888);
                mMaskCanvas = new Canvas(mMaskBitmap);
            }
            mMaskCanvas.drawRect(0, 0, mMaskCanvas.getWidth(), mMaskCanvas.getHeight(), mMaskPaint);
            // 在遮罩层上挖一个洞
            mMaskCanvas.drawCircle(180, 230, 100, mTransparentPaint);
    
            systemCanvas.drawBitmap(mMaskBitmap, 0, 0, mSystemCanvasPaint);
        }
    }
    

    调用

    TipView tipView = new TipView(this);
    tipView.setClickable(true);  // 防止点击事件被透传到 content_view
    ((ViewGroup) getWindow().getDecorView()).addView(tipView);
    
  • 相关阅读:
    seafile-docker
    nextcloud-docker
    nexus升级
    vSphere中设置K3OS
    文件大小排序
    Java SpringBoot Beetl模板
    电商 Python 生成刷单公司需要的评论格式2
    电商 Python 生成刷单公司需要的评论格式
    电商 Python 访客Excel合并
    Java SpringBoot Thymeleaf模板
  • 原文地址:https://www.cnblogs.com/okadanana/p/5978072.html
Copyright © 2011-2022 走看看