美文网首页
悬浮窗口

悬浮窗口

作者: 媚竹风 | 来源:发表于2017-04-09 18:29 被阅读30次

    概述

    在熊猫直播,等视频APP中,都有这样的一个功能,当退出播放界面的时候,会有一个小窗口播放视频,那么怎么实现的?

    如下图

    image

    视频播放窗口是可以随意拖动。

    那么该如何实现呢?

    关于 WindowManager.LayoutParams

    为什么刚开始就要谈 这个类,因为这个类非常的关键。

    其中 gravity,x,y这三个属性非常的重要。

    从sdk的给出的信息看:

       public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable {
            /**
             * X position for this window.  With the default gravity it is ignored.
             * When using {@link Gravity#LEFT} or {@link Gravity#START} or {@link Gravity#RIGHT} or
             * {@link Gravity#END} it provides an offset from the given edge.
             */
            @ViewDebug.ExportedProperty
            public int x;
    
            /**
             * Y position for this window.  With the default gravity it is ignored.
             * When using {@link Gravity#TOP} or {@link Gravity#BOTTOM} it provides
             * an offset from the given edge.
             */
            @ViewDebug.ExportedProperty
            public int y;
    
    

    如果gravity 是默认值,那么x,y就不会起作用。对于其它的情况下:

    it provides an offset from the given edge.

    这个是什么意思?

    比如,gravity 设置为 Gravity.LEFT | Gravity.TOP;

    那么这个Window会显示在屏幕的左上角位置,这个时候设置 x,y 那么基于左上角这个位置进行偏移。

    image

    如果设置为 Gravity.CENTER | Gravity.CENTER;

    那么,偏移的起始位置就是中心位置。

    image

    ==也就是说,x,y的偏移的起始位置,由Gravity决定的。==

    (上面的图用ps画的比较丑。但意思就是那个)

    还需要注意的是:

    在 y 轴上,不包括标题栏的高度,在计算的时候需要特别注意。

    关于WindowManger

    掌握了 WindowManger相关方法的用法

    • addView
    • removeView
    • updateViewLayout

    那么做出这样弹框一点都不难了。

    demo 的托管地址为:

    https://github.com/kuanMingLi/floatingWindows.git

    相关文章

      网友评论

          本文标题:悬浮窗口

          本文链接:https://www.haomeiwen.com/subject/iwadattx.html