diff --git a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java index 070c2d4e..c18afec4 100644 --- a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java +++ b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java @@ -19,6 +19,7 @@ import android.util.Log; import android.util.TypedValue; import android.view.Display; +import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; @@ -297,8 +298,14 @@ public boolean onTouch(View view, MotionEvent event) { } lastX = event.getRawX(); lastY = event.getRawY(); - int xx = params.x + (int) dx; - int yy = params.y + (int) dy; + boolean invertX = WindowSetup.gravity == (Gravity.TOP | Gravity.RIGHT) + || WindowSetup.gravity == (Gravity.CENTER | Gravity.RIGHT) + || WindowSetup.gravity == (Gravity.BOTTOM | Gravity.RIGHT); + boolean invertY = WindowSetup.gravity == (Gravity.BOTTOM | Gravity.LEFT) + || WindowSetup.gravity == Gravity.BOTTOM + || WindowSetup.gravity == (Gravity.BOTTOM | Gravity.RIGHT); + int xx = params.x + ((int) dx * (invertX ? -1 : 1)); + int yy = params.y + ((int) dy * (invertY ? -1 : 1)); params.x = xx; params.y = yy; windowManager.updateViewLayout(flutterView, params);