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