WindowManager 实现App内全局悬浮框

我们原有的APP中有视频播放以及投屏的功能,但是投屏只在当前页面起效,一旦退出,投屏就自动失效了。偏偏产品喜欢研究别人家的app,研究了一波之后,对我发出了直击灵魂的疑问:“为什么人家腾讯视频在投屏的时候有个悬浮按钮?”,"为什么人家优酷在投屏的时候有全局悬浮按钮?"

产品指着腾讯视频,终于露出了獠牙:“啊,我不管,我要这个!你要给我做!”。我的内心毫无波动,甚至还有点。。。

哎,好吧,做。

那我们就先来研究一下这个悬浮按钮吧。

如果要在单个Activity内实现一个悬浮按钮,只要你是个Android开发就会做了,那全局的悬浮按钮是不是就是要在左右的Activity中都来做一个这样的按钮呢?

这种思路不是说不可以,但是,太累了,不仅要在左右的activity里加,还要再fragment里面加。

于是,我们就直接把view添加到widnow上,这样就可以挣脱activity和fragment的束缚。那要怎么来添加呢?这就要借助windowmanager了,从名字上就可以看出,windowmanage时window的管理类,它本身包含3个方法,分别对应着增加view,删除view,更新view。

那具体要怎么使用呢?

1.自定义悬浮view 主要用来处理拖动事件,我们的view里面只放了一个图片

public class FloatView extends LinearLayout {

    /**
     * 系统状态栏高度
     */
    private static int statusBarHeight;

    /**
     * 窗口管理
     */
    private WindowManager windowManager;
    private WindowManager.LayoutParams layoutParams;

    /**
     * 点击事件
     * @param context
     */
    private OnFloatViewClickListener clickListener;

    public void setClickListener(OnFloatViewClickListener clickListener) {
        this.clickListener = clickListener;
    }

    public FloatView(Context context) {
        this(context, null);
    }

    public FloatView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public FloatView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        LayoutInflater.from(context).inflate(R.layout.window_float_layout, this);
    }

   


    public void setLayoutParams(WindowManager.LayoutParams layoutParams) {
        this.layoutParams = layoutParams;
    }

    private void updateWindow() {
        layoutParams.x = (int) (xInScreen-xViewScreen);
        layoutParams.y = (int) (yInScreen-yViewScreen);
        windowManager.updateViewLayout(this,layoutParams);
    }

    /**
     * 点击事件
     */
    public void onClick(){
    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值