短視訊app原始碼,連麥時最小化出現可移動懸浮窗

zhibo系統開發發表於2022-01-24

短視訊app原始碼,連麥時最小化出現可移動懸浮窗實現的相關程式碼

新建懸浮窗Service

新建懸浮窗Service FloatWinfowServices,因為我們使用的BindService,我們在onBind方法中初始化service中的佈局

override fun onBind(intent: Intent): IBinder? {
    initWindow()
    //懸浮框點選事件的處理
    initFloating()
    return MyBinder()
}

service中我們通過WindowManager來新增一個佈局顯示。

/**
 * 初始化視窗
 */
private fun initWindow() {
    winManager = application.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    //設定好懸浮窗的引數
    wmParams = params
    // 懸浮窗預設顯示以左上角為起始座標
    wmParams!!.gravity = Gravity.LEFT or Gravity.TOP
    //懸浮窗的開始位置,因為設定的是從左上角開始,所以螢幕左上角是x=0;y=0
    wmParams!!.x = winManager!!.defaultDisplay.width
    wmParams!!.y = 210
    //得到容器,通過這個inflater來獲得懸浮窗控制元件
    inflater = LayoutInflater.from(applicationContext)
    // 獲取浮動視窗檢視所在佈局
    mFloatingLayout = inflater!!.inflate(R.layout.remoteview, null)
    // 新增懸浮窗的檢視
    winManager!!.addView(mFloatingLayout, wmParams)
}

懸浮窗的引數主要設定懸浮窗的型別為

WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY

8.0 以下可設定為:

wmParams!!.type = WindowManager.LayoutParams.TYPE_PHONE

程式碼如下所示:

private //設定window type 下面變數2002是在螢幕區域顯示,2003則可以顯示在狀態列之上
        //設定可以顯示在狀態列上
        //設定懸浮視窗長寬資料
val params: WindowManager.LayoutParams
    get() {
        wmParams = WindowManager.LayoutParams()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            wmParams!!.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
        } else {
            wmParams!!.type = WindowManager.LayoutParams.TYPE_PHONE
        }
        wmParams!!.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR or
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
        wmParams!!.width = WindowManager.LayoutParams.WRAP_CONTENT
        wmParams!!.height = WindowManager.LayoutParams.WRAP_CONTENT
        return wmParams
    }


當點選懸浮窗的時候回到Activity2頁面,並且懸浮窗消失,所以我們只需要給懸浮窗新增點選事件

linearLayout!!.setOnClickListener { startActivity(Intent(this@FloatWinfowServices, Main2Activity::class.java)) }

以上就是短視訊app原始碼,連麥時最小化出現可移動懸浮窗實現的相關程式碼, 更多內容歡迎關注之後的文章

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2853796/,如需轉載,請註明出處,否則將追究法律責任。

相關文章