Skip to content

Commit dad9840

Browse files
committed
优化一些代码和注释
优化窗口默认 Flags 标记位 修正弹性拖动在横竖屏切换的计算不精准的问题
1 parent 650ca8c commit dad9840

File tree

7 files changed

+39
-36
lines changed

7 files changed

+39
-36
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#### 集成步骤
1414

1515
dependencies {
16-
implementation 'com.hjq:xtoast:3.5'
16+
implementation 'com.hjq:xtoast:5.0'
1717
}
1818

1919
#### 使用案例

XToast.apk

62.5 KB
Binary file not shown.

app/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
applicationId "com.hjq.xtoast.demo"
88
minSdkVersion 14
99
targetSdkVersion 28
10-
versionCode 35
11-
versionName "3.5"
10+
versionCode 50
11+
versionName "5.0"
1212
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1313
}
1414
buildTypes {
@@ -27,11 +27,11 @@ dependencies {
2727
implementation 'com.android.support:design:28.0.0'
2828

2929
// 权限请求框架:https://github.com/getActivity/XXPermissions
30-
implementation 'com.hjq:xxpermissions:6.0'
30+
implementation 'com.hjq:xxpermissions:6.2'
3131
// 标题栏:https://github.com/getActivity/TitleBar
3232
implementation 'com.hjq:titlebar:6.0'
3333
// 吐司工具类:https://github.com/getActivity/ToastUtils
3434
implementation 'com.hjq:toast:8.0'
3535
// 内存泄漏捕捉:https://github.com/square/leakcanary
36-
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0'
36+
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
3737
}

app/src/main/java/com/hjq/xtoast/demo/MainActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ public void hasPermission(List<String> granted, boolean isAll) {
140140
public void onClick(XToast toast, ImageView view) {
141141
// 点击后跳转到拨打电话界面
142142
Intent intent = new Intent(Intent.ACTION_DIAL);
143+
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
143144
toast.startActivity(intent);
144145
}
145146
})

library/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ android {
77
defaultConfig {
88
minSdkVersion 14
99
targetSdkVersion 26
10-
versionCode 35
11-
versionName "3.5"
10+
versionCode 50
11+
versionName "5.0"
1212
}
1313
}
1414

1515
publish {
1616
userOrg = 'getactivity'
1717
groupId = 'com.hjq'
1818
artifactId = 'xtoast'
19-
version = '3.5'
19+
version = '5.0'
2020
description = 'This is a simple and easy to use suspension window frame'
2121
website = "https://github.com/getActivity/XToast"
2222
}

library/src/main/java/com/hjq/xtoast/XToast.java

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ private XToast(Context context) {
6363
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
6464
mWindowParams.format = PixelFormat.TRANSLUCENT;
6565
mWindowParams.windowAnimations = android.R.style.Animation_Toast;
66-
mWindowParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
6766
mWindowParams.packageName = context.getPackageName();
67+
// 开启窗口常亮和设置可以触摸外层布局(除 WindowManager 外的布局,默认是 WindowManager 显示的时候外层不可触摸)
68+
mWindowParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
6869
}
6970

7071
/**
@@ -73,8 +74,9 @@ private XToast(Context context) {
7374
public XToast(Activity activity) {
7475
this((Context) activity);
7576

76-
// 如果当前 Activity 是全屏模式,那么需要添加这个标记,否则会导致 WindowManager 在某些机型上移动不到状态栏位置上
7777
if ((activity.getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0) {
78+
// 如果当前 Activity 是全屏模式,那么需要添加这个标记,否则会导致 WindowManager 在某些机型上移动不到状态栏的位置上
79+
// 如果不想让状态栏显示的时候把 WindowManager 顶下来,可以添加 FLAG_LAYOUT_IN_SCREEN,但是会导致软键盘无法调整窗口位置
7880
addWindowFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
7981
}
8082

@@ -104,7 +106,7 @@ public boolean hasWindowFlags(int flags) {
104106
}
105107

106108
/**
107-
* 添加一个标志位
109+
* 添加一个标记位
108110
*/
109111
public X addWindowFlags(int flags) {
110112
mWindowParams.flags |= flags;
@@ -115,7 +117,7 @@ public X addWindowFlags(int flags) {
115117
}
116118

117119
/**
118-
* 移除一个标志位
120+
* 移除一个标记位
119121
*/
120122
public X removeWindowFlags(int flags) {
121123
mWindowParams.flags &= ~flags;
@@ -126,7 +128,7 @@ public X removeWindowFlags(int flags) {
126128
}
127129

128130
/**
129-
* 设置标志位
131+
* 设置标记位
130132
*/
131133
public X setWindowFlags(int flags) {
132134
mWindowParams.flags = flags;
@@ -169,13 +171,10 @@ public X setDraggable() {
169171
* 设置拖动规则
170172
*/
171173
public X setDraggable(BaseDraggable draggable) {
172-
// 当前是否设置了不可触摸,如果是就擦除掉
174+
// 当前是否设置了不可触摸,如果是就擦除掉这个标记
173175
if (hasWindowFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)) {
174176
removeWindowFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
175177
}
176-
// WindowManager 几个焦点总结:https://blog.csdn.net/zjx2014430/article/details/51776128
177-
// 设置触摸范围为当前的 RootView,而不是整个 WindowManager
178-
addWindowFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
179178
mDraggable = draggable;
180179
if (isShow()) {
181180
update();
@@ -562,30 +561,40 @@ public X setImageDrawable(int viewId, Drawable drawable) {
562561
/**
563562
* 设置点击事件
564563
*/
564+
public X setOnClickListener(OnClickListener listener) {
565+
return setOnClickListener(mRootView, listener);
566+
}
567+
565568
public X setOnClickListener(int id, OnClickListener listener) {
566-
new ViewClickWrapper(this, findViewById(id), listener);
569+
return setOnClickListener(findViewById(id), listener);
570+
}
571+
572+
private X setOnClickListener(View view, OnClickListener listener) {
567573
// 当前是否设置了不可触摸,如果是就擦除掉
568574
if (hasWindowFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)) {
569575
removeWindowFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
570-
if (isShow()) {
571-
update();
572-
}
573576
}
577+
new ViewClickWrapper(this, view, listener);
574578
return (X) this;
575579
}
576580

577581
/**
578582
* 设置触摸事件
579583
*/
584+
public X setOnTouchListener(OnTouchListener listener) {
585+
return setOnTouchListener(mRootView, listener);
586+
}
587+
580588
public X setOnTouchListener(int id, OnTouchListener listener) {
581-
new ViewTouchWrapper(this, findViewById(id), listener);
589+
return setOnTouchListener(findViewById(id), listener);
590+
}
591+
592+
private X setOnTouchListener(View view, OnTouchListener listener) {
582593
// 当前是否设置了不可触摸,如果是就擦除掉
583594
if (hasWindowFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)) {
584595
removeWindowFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
585-
if (isShow()) {
586-
update();
587-
}
588596
}
597+
new ViewTouchWrapper(this, view, listener);
589598
return (X) this;
590599
}
591600

library/src/main/java/com/hjq/xtoast/draggable/SpringDraggable.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,10 @@
1717
*/
1818
public class SpringDraggable extends BaseDraggable {
1919

20-
/** 屏幕高度 */
21-
private float mScreenWidth;
22-
2320
/** 手指按下的坐标 */
2421
private float mViewDownX;
2522
private float mViewDownY;
2623

27-
@Override
28-
public void start(XToast toast) {
29-
super.start(toast);
30-
mScreenWidth = getScreenWidth();
31-
}
32-
3324
@SuppressLint("ClickableViewAccessibility")
3425
@Override
3526
public boolean onTouch(View v, MotionEvent event) {
@@ -53,14 +44,16 @@ public boolean onTouch(View v, MotionEvent event) {
5344
// 记录移动的位置(相对屏幕的坐标)
5445
rawMoveX = (int) event.getRawX();
5546
rawMoveY = (int) (event.getRawY() - getStatusBarHeight());
47+
// 获取当前屏幕的宽度
48+
int screenWidth = getScreenWidth();
5649
// 自动回弹吸附
5750
final float rawFinalX;
58-
if (rawMoveX < mScreenWidth / 2) {
51+
if (rawMoveX < screenWidth / 2) {
5952
// 回弹到屏幕左边
6053
rawFinalX = 0;
6154
} else {
6255
// 回弹到屏幕右边
63-
rawFinalX = mScreenWidth;
56+
rawFinalX = screenWidth;
6457
}
6558
// 从移动的点回弹到边界上
6659
startAnimation(rawMoveX - mViewDownX, rawFinalX - mViewDownX, rawMoveY - mViewDownY);

0 commit comments

Comments
 (0)