public FloatWindowManager(Context context, TextureView mainTextureView) {
this.mainTextureView = mainTextureView;
windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
int windowSizeInPixel = convertDpToPixel(windowSizeInDp, displayMetrics.density);
windowParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
windowParams.gravity = Gravity.TOP | Gravity.START;
floatView = new FrameLayout(context);
closeButton = new Button(context);
closeButton.setText("Close");
floatView.addView(closeButton, new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL
floatView.setBackgroundResource(R.color.grey);
floatView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
initialWindowX = windowParams.x;
initialWindowY = windowParams.y;
case MotionEvent.ACTION_MOVE:
float dx = event.getRawX() - initialTouchX;
float dy = event.getRawY() - initialTouchY;
windowParams.x = (int) (initialWindowX + dx);
windowParams.y = (int) (initialWindowY + dy);
windowManager.updateViewLayout(floatView, windowParams);