ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android自定义局部透明遮罩-新手引导说明

2021-02-21 15:58:22  阅读:170  来源: 互联网

标签:遮罩 自定义 int MyShadeView mPaint context new android public


概述

大致思路就是自定义一个View,然后设置一个遮罩背景,再绘制一个圆圈用于透明显示下面的内容,如果想要说明文字啥的,就再绘制,空白画布,想干嘛干嘛啦。

画笔

有个重点就是画笔画出来的圆圈要透明显示下面的内容,而不是背景色,这个要借助PorterDuffXfermode来实现。

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
PorterDuffXfermode porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
mPaint.setXfermode(porterDuffXfermode);
mPaint.setAntiAlias(true);

控制透明圆的位置

写个方法来改变所绘制的圆圈的位置

public void setCircleLocation(int x, int y, int radius) {
    this.mX = x;
    this.mY = y;
    this.mRadius = radius;
    invalidate();
}

完整代码

public class MyShadeView extends FrameLayout {
    private Paint mPaint;
    private int mX, mY, mRadius;

    public MyShadeView(@NonNull Context context) {
        super(context);
        init();
    }

    public MyShadeView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyShadeView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        setBackgroundColor(Color.parseColor("#EF000000"));
        mX = 150;
        mY = 100;
        mRadius = 80;
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        PorterDuffXfermode porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
        mPaint.setXfermode(porterDuffXfermode);
        mPaint.setAntiAlias(true);
    }

    public void setCircleLocation(int x, int y, int radius) {
        this.mX = x;
        this.mY = y;
        this.mRadius = radius;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(mX, mY, mRadius, mPaint);
    }
}

引用加载布局

当成一个控件view来用就行了,我这里是当作悬浮窗的布局来直接new一个实例出来的

MyShadeView mView = new MyShadeView(FloatShadeService.this);
mView.setCircleLocation(200, 300, 100);

作为悬浮窗遮罩还要考虑移动透明圆的位置和不影响遮罩下点击操作等,以后有机会再写啦。
更多玩法自己还可再发挥……

标签:遮罩,自定义,int,MyShadeView,mPaint,context,new,android,public
来源: https://blog.csdn.net/ymtianyu/article/details/113918971

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有