概述
在熊猫直播,等视频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 的托管地址为:
网友评论