效果图
原理
获取windowManager 设定WindowManager.LayoutParams使窗口悬浮
主要涉及的值如下,其中
params.type = WindowManager.LayoutParams.TYPE_APPLICATION;
设置悬浮窗在应用内,在弹出dialog会悬浮在dialog下方,如果将这个值设置为TYPE_PHONE那么会悬浮在屏幕最上方,回到桌面后,如果应用没有退出悬浮球还是会出现在桌面上,所以如果要开发桌面悬浮球可以这样设置。
WindowManager.LayoutParams params;
params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_APPLICATION;
params.format = PixelFormat.TRANSLUCENT;
params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
params.gravity = Gravity.LEFT | Gravity.TOP;
params.width = viewWidth;
params.height = viewHeight;
params.x = 0;
params.y = screenHeight / 3;
windowManager.addView(*****,params);
代码
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Build;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Created by fanweichao on 2016/9/6.
*/
public class FloatView extends LinearLayout {
private Context mContext;
private WindowManager windowManager;
private View floatView;
public int viewWidth;
public int viewHeight;
private WindowManager.LayoutParams params;
private float xInScreen;
private float yInScreen;
private float xInView;
private