Android在系统界面上添加窗口

发布时间:2024年01月18日

WindowManager.addView()是Android中的一个方法,用于在屏幕上添加一个窗口。它允许你在应用程序的上下文之外创建一个窗口,并将其显示在其他应用程序或系统界面上。

  1. 新建一个自定义View用于显示

     class MyView @JvmOverloads constructor(context: Context?,attrs: AttributeSet? = null,
                       defStyleAttr: Int = 0) :
        View(context, attrs, defStyleAttr) {
        var myImage:Bitmap?=null
        var pX = 0f
        var pY = 0f
        init {
            myImage = BitmapFactory.decodeResource(resources,R.mipmap.image)
        }
        fun setPos(x:Float,y:Float){
            this.pX = x;
            this.pY = y
            invalidate()
        }
    
        override fun onDraw(canvas: Canvas?) {
            super.onDraw(canvas)
            if (pX != 0f||pY != 0f){
                myImage?.let {
                    canvas?.drawBitmap(it,pX,pY,null)
                }
            }
        }
    }
    
  2. 使用windowManager.addView()显示

      var myView :MyView?=null
      var randomCount = 0
      private fun show() {
             myView = MyView(mConext)
             val layoutParams = WindowManager.LayoutParams(
                 WindowManager.LayoutParams.WRAP_CONTENT,
                 WindowManager.LayoutParams.WRAP_CONTENT,
                 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,// 设置窗口类型为悬浮窗口,需要悬浮窗权限
                 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,// 窗口不需要获取焦点
                 PixelFormat.TRANSLUCENT // 设置窗口背景为透明
             )
             val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
             windowManager.addView(myView , layoutParams)
             CoroutineScope(Dispatchers.IO).launch {
                 while (randomCount < 20){
                     delay(1000)
                     withContext(Dispatchers.Main){
                         myView?.let {
                             it.setPos((0 until 500).random().toFloat(), (0 until 500).random().toFloat())
                         }
                     }
                     randomCount ++
                 }
                 withContext(Dispatchers.Main){
                     windowManager.removeView(myView)
                 }
             }
         }
    

首先创建了一个WindowManager对象,在这个对象上进行操作。然后创建了一个自定义的MyView对象,作为要添加的窗口的内容。接下来,创建了WindowManager.LayoutParams对象,用于指定窗口的各种属性,比如宽度、高度、位置等。最后,通过windowManager.addView()方法将自定义的View添加到WindowManager中,从而将其显示在屏幕上。

文章来源:https://blog.csdn.net/wolf0706/article/details/135648960
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。