Skip to content

Commit ae59fcc

Browse files
committed
修复悬浮窗在非全屏页面跳转到全屏页面后触摸会出现位置偏移的问题
1 parent 48b4b6b commit ae59fcc

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

library/src/main/java/com/hjq/window/draggable/BaseDraggable.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.util.TypedValue;
1010
import android.view.DisplayCutout;
1111
import android.view.Gravity;
12+
import android.view.MotionEvent;
1213
import android.view.View;
1314
import android.view.View.OnLayoutChangeListener;
1415
import android.view.View.OnTouchListener;
@@ -63,6 +64,30 @@ public void start(EasyWindow<?> easyWindow) {
6364
});
6465
}
6566

67+
@Override
68+
public final boolean onTouch(View v, MotionEvent event) {
69+
if (event.getAction() == MotionEvent.ACTION_DOWN) {
70+
// 在按下的时候先更新一下窗口信息和坐标信息,否则点击可能会出现坐标偏移的问题
71+
// 全局的悬浮窗在非全屏的页面创建,跳转到全屏的页面展示就会导致坐标偏移
72+
// 这是因为在跳转到全屏的悬浮窗的时候没有更新当前 Window 信息导致的
73+
// 目前能想到比较好的办法就是在悬浮窗移动前之前先更新 Window 信息和 View 坐标
74+
// Github issue 地址:https://github.com/getActivity/EasyWindow/issues/69
75+
refreshWindowInfo();
76+
refreshLocationCoordinate();
77+
}
78+
return onDragWindow(mEasyWindow, mDecorView, event);
79+
}
80+
81+
/**
82+
* 窗口拖拽回调方法
83+
*
84+
* @param easyWindow 当前窗口对象
85+
* @param decorView 当前窗口视图
86+
* @param event 当前触摸事件
87+
* @return 根据返回值决定是否拦截该事件
88+
*/
89+
public abstract boolean onDragWindow(EasyWindow<?> easyWindow, View decorView, MotionEvent event);
90+
6691
public EasyWindow<?> getEasyWindow() {
6792
return mEasyWindow;
6893
}

library/src/main/java/com/hjq/window/draggable/MovingDraggable.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.annotation.SuppressLint;
44
import android.view.MotionEvent;
55
import android.view.View;
6+
import com.hjq.window.EasyWindow;
67

78
/**
89
* author : Android 轮子哥
@@ -21,7 +22,7 @@ public class MovingDraggable extends BaseDraggable {
2122

2223
@SuppressLint("ClickableViewAccessibility")
2324
@Override
24-
public boolean onTouch(View v, MotionEvent event) {
25+
public boolean onDragWindow(EasyWindow<?> easyWindow, View decorView, MotionEvent event) {
2526
switch (event.getAction()) {
2627
case MotionEvent.ACTION_DOWN:
2728
// 记录按下的位置(相对 View 的坐标)

library/src/main/java/com/hjq/window/draggable/SpringBackDraggable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public SpringBackDraggable(int springBackOrientation) {
5353

5454
@SuppressLint("ClickableViewAccessibility")
5555
@Override
56-
public boolean onTouch(View v, MotionEvent event) {
56+
public boolean onDragWindow(EasyWindow<?> easyWindow, View decorView, MotionEvent event) {
5757
switch (event.getAction()) {
5858
case MotionEvent.ACTION_DOWN:
5959
// 记录按下的位置(相对 View 的坐标)

0 commit comments

Comments
 (0)