Android在系统界面上添加窗口

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中,从而将其显示在屏幕上。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值