首页 > 其他分享 >Android创建引导时的镂空View漏空view

Android创建引导时的镂空View漏空view

时间:2023-12-22 14:11:57浏览次数:32  
标签:baseView ViewGroup val 漏空 import Android root android view

 

import android.graphics.RectF
import android.view.View
import android.view.ViewGroup

object MyGuideUtil {
    /**
     * @baseView 在哪个view基础上进行镂空
     */
    fun guideMain(baseView: View) {
        val location = IntArray(2)
        baseView.getLocationInWindow(location)
        //左上角顶点坐标
        val viewX = location[0]
        val viewY = location[1]
        //右下角顶点坐标
        val viewX1 = viewX + baseView.width.toFloat()
        val viewY1 = viewY + baseView.height.toFloat()

        val guideView = MyGuideView(baseView.context).apply {
            reDraw(
                RectF(
                    viewX.toFloat(),
                    viewY.toFloat(),
                    viewX1,
                    viewY1
                )
            )
        }
        /**
         * TODO 在哪个根布局的FrameLayout中增加这个guide
         * 第一种:可以使用activity根布局的实例
         * 第二种:也可以自己建一个全屏的弹窗
         */
        if(baseView.rootView is ViewGroup){
            (baseView.rootView as ViewGroup).apply {
                addView(guideView)
            }
            //TODO 设置“跳过”及其他按钮的位置后再添加进去
            //guideView.root.addView()
        }
    }
}

 

import android.content.Context
import android.graphics.*
import android.view.ViewGroup
import android.widget.FrameLayout

/**
 * 镂空区域绘制 漏空区域绘制
 */
class MyGuideView : FrameLayout {

    constructor(context: Context) : super(context) {
        root = FrameLayout(context)
        addView(root)
        val lp = root.layoutParams
        lp.width = ViewGroup.LayoutParams.MATCH_PARENT
        lp.height = ViewGroup.LayoutParams.MATCH_PARENT
        root.layoutParams = lp
        //禁止镂空区域下层被点击
        root.setOnClickListener { }

        paint = Paint().apply {
            //带渐变的黑色
            color = Color.parseColor("#A9000000")
        }

        path = Path()
        path.fillType = Path.FillType.INVERSE_EVEN_ODD
    }

    override fun dispatchDraw(canvas: Canvas?) {
        canvas?.drawPath(path, paint)
        super.dispatchDraw(canvas)
    }

    //TODO 这个root对象是给外部用的,可以增加“跳过按钮”
    var root: ViewGroup

    private var paint: Paint

    private var path: Path

    /**
     * 重新绘制
     */
    fun reDraw(rectF: RectF) {
        path.reset()
        path.addRoundRect(rectF, 20f, 20f, Path.Direction.CW)

        invalidate()
    }

}

 

标签:baseView,ViewGroup,val,漏空,import,Android,root,android,view
From: https://www.cnblogs.com/zuiniub/p/17921459.html

相关文章

  • 优测云服务平台总结Android开发常见风险及解决方案
    Android作为一个普及度、成熟度极高的平台,每天都有大量新APP涌现。开发一款Android应用,除了要有新颖的创意和高效的性能,保证安全性也是不容忽视的问题。俗话说打铁还需自身硬。接下来,我们会陆续与大家分享一些常见、不常见的代码风险问题,希望对您的Android开发工作有一定的......
  • 关于kkfileview文件流形式、本地测试html
    <html><inputtype="text"id="url"> <inputtype="button"value="转换"><scripttype="text/javascript"src="https://cdn.jsdelivr.net/npm/[email protected]/base64.m......
  • DevExpress中使用BandGridView实现复合(多行)表头、设置多行表头背景颜色、表格边框颜色
    一、实现效果二、实现方法2.1、创建复合表头①将创建的GridControl下的GirdView1转化为BandGridView类型;②创建需要展示的列(指定列的名称【Name】、描述【caption】、数据字段名称【FieldName】)③绑定列实现复合表头。注意:如果复合表头有多行,则需要设置新增Band的RowCoun......
  • Android开发基本规范整理
    1前言为了有利于项目维护、增强代码可读性、提升CodeReview效率以及规范团队安卓开发效率,故提出以下安卓开发规范2AS规范工欲善其事,必先利其器。尽量使用最新的稳定版的IDE进行开发;编码格式统一为UTF-8;编辑完.java、.xml等文件后一定要格式化,格式化,格式化(win快捷键cr......
  • 临近年末,整理了一份 Android 程序员必看的面试合集
    前言总体来说,面试一般都是基于你的简历来进行的,一般先考察你的基础,然后考察你知识体系的完备程度,接着会考察你的极限,最后还会考察一些软技能,比如你的学习能力、协作能力、沟通能力、分析解决未知问题的能力、抗压能力等。个人心得凡事预则立,不预则废准备周期面试之前,最好先系统的复......
  • RK3568开发平台Android 11强制所有应用横屏展示
    点击上方“天嵌股份”关注公众号后回复TQ3568_CoreB获取板卡硬件资料Android11强制所有应用横屏展示 1、打开frameworks/base/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java文件,定位到parseActivityOrReceiver方法的intscreenOrientation=sa.getI......
  • RK3568开发平台Android 11强制所有应用横屏展示
    RK3568开发平台Android11强制所有应用横屏展示Android11强制所有应用横屏展示1、打开frameworks/base/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java文件,定位到parseActivityOrReceiver方法的intscreenOrientation=sa.getInt(R.styleable.Androi......
  • RK3568开发平台Android 11强制所有应用横屏展示
    Android11强制所有应用横屏展示 1、打开frameworks/base/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java文件,定位到parseActivityOrReceiver方法的intscreenOrientation=sa.getInt(R.styleable.AndroidManifestActivity_screenOrientation,SCREEN......
  • Android安卓打包app应用程序编译shrinkResources true报错解决方案
    Hello各位同学们好,我是咕噜铁蛋!在Android开发中,当我们需要打包应用程序时,经常会遇到一些问题。其中一个常见的问题是在使用shrinkResources设置为true时出现的编译错误。这个选项是在AndroidGradle插件的build.gradle文件中设置的,用于减少最终APK文件的大小。然而,如果设置不正确,可......
  • WPF ListView GridView表头Header修改外观的方式
    <Window.Resources><DataTemplatex:Key="BlueHeader"><StackPanelOrientation="Horizontal"Margin="-5,-5,-5,-5"Width="120"><StackPanel.Background><LinearGradi......