android 挖空效果,从PopupWindow中引导图挖空

自定义AreaMaskView

class AreaMaskView @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null
): View(context, attrs) {

    /**
     * 目标布局周围的空白区域
     */
    private val brimRect = RectF()

    /**
     * 显示目标区域的画笔
     */
    private val brimPaint = Paint()

    /**
     * 圆角
     */
    private var mRadius = dpToPx(8f)
    /**
     * 蒙版的背景颜色
     */
    private val bgColor = Color.parseColor("#80222427")

    init {
        brimPaint.color = Color.TRANSPARENT
        brimPaint.maskFilter = BlurMaskFilter(10f,BlurMaskFilter.Blur.INNER)
        //图像合成模式为CLEA
        brimPaint.xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
        setLayerType(LAYER_TYPE_SOFTWARE, null)
    }

  fun setTargetRect(targetRect:Rect){
      brimRect.left = targetRect.left.toFloat()
      brimRect.right = targetRect.right.toFloat()
      val top = targetRect.top.toFloat()  - getStatusBarHeight()
      brimRect.top = top
      brimRect.bottom = targetRect.bottom.toFloat()  - getStatusBarHeight()
      invalidate()
  }
    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.drawColor(bgColor)
        canvas?.drawRoundRect(brimRect, mRadius, mRadius, brimPaint)
        canvas?.save()
        canvas?.restore()
    }
}

XxxxPopupWindow弹框

class XxxxPopupWindow(
    val context: Context,
    val callback: ()->Unit
) :
    XxxxPopupWindow(context) {


/**
     * 当前蒙版的目标布局的坐标位置
     */
    private val targetRect = Rect()

    fun showAtLocation(anchor: View) {
        anchor.getGlobalVisibleRect(targetRect)
        mBinding.AreaMaskView(布局中的id).setTargetRect(targetRect)
}
}
<FrameLayout
            android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
 <cn.dandroid.AreaMaskView
            android:id="@+id/dandroid_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_tips_popup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
</androidx.constraintlayout.widget.ConstraintLayout>
    </FrameLayout>
阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/21458,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?