Skip to content

Commit 1d3bfad

Browse files
committed
Merge branch 'master' into androidx
2 parents a86b051 + 7089d77 commit 1d3bfad

File tree

4 files changed

+112
-106
lines changed

4 files changed

+112
-106
lines changed

README.md

Lines changed: 27 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@ Android稳定高效的浮层创建管理框架。
1414

1515

1616

17+
# 优势
18+
19+
如果你的App用的是单Activity架构,那么这个就是系统Dialog/PopupWindow/Toast的完美替代。而且可以实现悬浮按钮和引导层等一些列功能。
20+
21+
不是单Activity也不影响,上面这些功能一样可以实现,只是
22+
23+
- 相对于Dialog更轻量,相对于PopupWindow
24+
25+
26+
1727
# 简介
1828

1929
- 同时兼容support和androidx
@@ -93,14 +103,16 @@ Android稳定高效的浮层创建管理框架。
93103

94104
![](https://img.shields.io/badge/Downloads%20Week-1.4k-green) ![](https://img.shields.io/badge/Downloads%20Month-7.3K-blue)
95105

96-
- ### 添加jitpack库
106+
- ### 添加仓库
97107

98108
```groovy
99109
// build.gradle(Project:)
100110
allprojects {
101111
repositories {
102-
maven { url 'https://www.jitpack.io' }
112+
maven { url "https://www.jitpack.io" }
113+
103114
// 支持4.1.0及以后版本
115+
// 使用4.1.5及以后版本必须添加,因为高斯模糊实现用到的VisualEffect库暂时只发布在了的gitee仓库
104116
// maven { url "https://gitee.com/goweii/maven-repository/raw/master/releases/" }
105117
}
106118
}
@@ -113,82 +125,32 @@ allprojects {
113125
// build.gradle(Module:)
114126
dependencies {
115127
// 完整引入,二选一
116-
implementation 'com.github.goweii:AnyLayer:4.1.4-androidx'
117-
implementation 'com.github.goweii:AnyLayer:4.1.4-support'
128+
implementation "com.github.goweii:AnyLayer:4.1.4-androidx"
129+
// implementation "com.github.goweii:AnyLayer:4.1.4-support"
118130
131+
// 按需引入
119132
// 基础库
120-
// implementation 'com.github.goweii.AnyLayer:anylayer:4.1.4-androidx'
121-
// 自动初始化(依赖基础库和Android Jetpack App Startup)
122-
// implementation 'com.github.goweii.AnyLayer:anylayer-startup:4.1.4-androidx'
133+
// implementation "com.github.goweii.AnyLayer:anylayer:4.1.4-androidx"
134+
// 自动初始化(依赖基础库和Jetpack Startup)
135+
// implementation "com.github.goweii.AnyLayer:anylayer-startup:4.1.4-androidx"
123136
// 扩展库(依赖基础库)
124-
// implementation 'com.github.goweii.AnyLayer:anylayer-ext:4.1.4-androidx'
137+
// implementation "com.github.goweii.AnyLayer:anylayer-ext:4.1.4-androidx"
125138
// Kotlin扩展库(依赖基础库和扩展库)
126-
// implementation 'com.github.goweii.AnyLayer:anylayer-ktx:4.1.4-androidx'
139+
// implementation "com.github.goweii.AnyLayer:anylayer-ktx:4.1.4-androidx"
127140
}
128141
```
129142

143+
- ### 一些问题/建议
130144

145+
- 建议按需引入
131146

132-
## 更新说明
133-
134-
[点击查看详细更新说明](https://github.com/goweii/AnyLayer/releases)
135-
136-
### 4.1.3
137-
138-
- 优化输入法适配
139-
- 修复一些BUG
140-
141-
### 4.1.1
142-
143-
- 修复物理返回键事件拦截问题
144-
- 修复带输入框弹窗点击外部关闭需要2次才能触发的问题
145-
146-
### 4.1.0
147-
148-
- 适配分屏小窗和横竖屏切换
149-
- 新增设置通知最大宽高
150-
- 新增3组对其方式
151-
- 新增吐司自定义布局
152-
- 吐司和通知默认布局适配暗色模式
153-
- 修复一些代码错误
147+
- anylayer-startup依赖于Jetpack Startup,仅支持androidx,support需要自己在application初始化
154148

155-
### 4.0.0
156149

157-
- 重构包结构
158-
- 新增通知/悬浮按钮/引导浮层
159-
- 支持自定义浮层层级
160150

161-
### 3.6.0
162-
163-
- 新增ext库,添加常用动画创建器
164-
- 新增ktx库,方便kotlin调用
165-
166-
### 3.5.0
167-
168-
- 添加注解,避免kotlin调用变为可选型
169-
170-
### 3.3.0
171-
172-
- 拆分为support和androidx两个分支
173-
174-
### 3.1.0
175-
176-
- 移除对support-v7的依赖,可同时兼容support和androidx
177-
178-
### 3.0.0
179-
180-
- 大型重构,修改层级和继承结构,API改变很大
181-
- 删除common库
182-
183-
### 2.5.0
184-
185-
- 新增popupWindow效果时可跟随targetView移动
186-
- 可以从ApplicationContext中弹出
187-
- 监听器支持添加多个
188-
189-
### 2.4.0
151+
## 更新说明
190152

191-
- 新增通用库
153+
[点击查看](https://github.com/goweii/AnyLayer/releases)
192154

193155

194156

anylayer/src/main/java/per/goweii/anylayer/DecorLayer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,11 @@ public void run() {
212212
}
213213

214214
@Override
215-
public void dismiss() {
215+
public void dismiss(boolean withAnim) {
216216
if (mShowRunnable != null) {
217217
getViewHolder().getDecor().removeCallbacks(mShowRunnable);
218218
} else {
219-
super.dismiss();
219+
super.dismiss(withAnim);
220220
}
221221
}
222222

anylayer/src/main/java/per/goweii/anylayer/Layer.java

Lines changed: 67 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,27 @@ public boolean onKey(int keyCode, KeyEvent event) {
4343
}
4444
};
4545

46+
private final Runnable mInAnimEndCallback = new Runnable() {
47+
@Override
48+
public void run() {
49+
Layer.this.handleInAnimEnd();
50+
}
51+
};
52+
53+
private final Runnable mOutAnimEndCallback = new Runnable() {
54+
@Override
55+
public void run() {
56+
Layer.this.handleOutAnimEnd();
57+
}
58+
};
59+
4660
private final ViewManager mViewManager;
4761
private final ViewHolder mViewHolder;
4862
private final ListenerHolder mListenerHolder;
4963
private final Config mConfig;
5064

65+
private ViewTreeObserver.OnPreDrawListener mShowOnPreDrawListener = null;
66+
5167
private boolean mShowWithAnim = false;
5268
private boolean mDismissWithAnim = false;
5369

@@ -193,38 +209,32 @@ protected void onGlobalPreDraw() {
193209
private void handleShow() {
194210
if (isShown()) {
195211
if (isOutAnimRunning()) {
196-
startAnimatorIn(new Runnable() {
197-
@Override
198-
public void run() {
199-
onShow();
200-
}
201-
});
212+
startAnimatorIn();
202213
}
203214
return;
204215
}
205216
onCreate();
206217
mViewManager.attach();
207218
onAttach();
208219
getViewHolder().getChild().setVisibility(View.VISIBLE);
209-
getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
210-
@Override
211-
public boolean onPreDraw() {
212-
if (getViewTreeObserver().isAlive()) {
213-
getViewTreeObserver().removeOnPreDrawListener(this);
214-
}
215-
onAppear();
216-
startAnimatorIn(new Runnable() {
217-
@Override
218-
public void run() {
219-
onShow();
220+
if (mShowOnPreDrawListener == null) {
221+
mShowOnPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
222+
@Override
223+
public boolean onPreDraw() {
224+
mShowOnPreDrawListener = null;
225+
if (getViewTreeObserver().isAlive()) {
226+
getViewTreeObserver().removeOnPreDrawListener(this);
220227
}
221-
});
222-
return true;
223-
}
224-
});
228+
onAppear();
229+
startAnimatorIn();
230+
return true;
231+
}
232+
};
233+
}
234+
getViewTreeObserver().addOnPreDrawListener(mShowOnPreDrawListener);
225235
}
226236

227-
private void startAnimatorIn(@NonNull Runnable onEnd) {
237+
private void startAnimatorIn() {
228238
cancelAnimator();
229239
if (mShowWithAnim) {
230240
mAnimatorIn = onCreateInAnimator(mViewHolder.getChild());
@@ -238,34 +248,41 @@ public void onAnimationEnd(Animator animation) {
238248

239249
@Override
240250
public void onAnimationEndWithoutCancel(Animator animation) {
241-
onEnd.run();
251+
super.onAnimationEndWithoutCancel(animation);
252+
mInAnimEndCallback.run();
242253
}
243254
});
244255
mAnimatorIn.start();
245256
} else {
246-
onEnd.run();
257+
mInAnimEndCallback.run();
247258
}
248259
} else {
249-
onEnd.run();
260+
mInAnimEndCallback.run();
250261
}
251262
}
252263

264+
private void handleInAnimEnd() {
265+
onShow();
266+
}
267+
253268
private void handleDismiss() {
254269
if (!isShown()) return;
255270
if (isOutAnimRunning()) return;
256-
onDismiss();
257-
startAnimatorOut(new Runnable() {
258-
@Override
259-
public void run() {
260-
onDisappear();
261-
mViewManager.detach();
262-
onDetach();
263-
onDestroy();
271+
if (mShowOnPreDrawListener != null) {
272+
mShowOnPreDrawListener = null;
273+
if (getViewTreeObserver().isAlive()) {
274+
getViewTreeObserver().removeOnPreDrawListener(mShowOnPreDrawListener);
264275
}
265-
});
276+
mViewManager.detach();
277+
onDetach();
278+
onDestroy();
279+
return;
280+
}
281+
onDismiss();
282+
startAnimatorOut();
266283
}
267284

268-
private void startAnimatorOut(@NonNull final Runnable onEnd) {
285+
private void startAnimatorOut() {
269286
cancelAnimator();
270287
if (mDismissWithAnim) {
271288
mAnimatorOut = onCreateOutAnimator(mViewHolder.getChild());
@@ -279,33 +296,45 @@ public void onAnimationEnd(Animator animation) {
279296

280297
@Override
281298
public void onAnimationEndWithoutCancel(Animator animation) {
299+
super.onAnimationEndWithoutCancel(animation);
282300
// 动画执行结束后不能直接removeView,要在下一个dispatchDraw周期移除
283301
// 否则会崩溃,因为viewGroup的childCount没有来得及-1,获取到的view为空
284302
getViewHolder().getChild().setVisibility(View.INVISIBLE);
285-
getViewHolder().getParent().post(onEnd);
303+
getViewHolder().getParent().post(mOutAnimEndCallback);
286304
}
287305
});
288306
mAnimatorOut.start();
289307
} else {
290308
getViewHolder().getChild().setVisibility(View.INVISIBLE);
291-
onEnd.run();
309+
mOutAnimEndCallback.run();
292310
}
293311
} else {
294312
getViewHolder().getChild().setVisibility(View.INVISIBLE);
295-
onEnd.run();
313+
mOutAnimEndCallback.run();
296314
}
297315
}
298316

317+
private void handleOutAnimEnd() {
318+
onDisappear();
319+
mViewManager.detach();
320+
onDetach();
321+
onDestroy();
322+
}
323+
299324
private ViewTreeObserver getViewTreeObserver() {
300325
return getViewHolder().getParent().getViewTreeObserver();
301326
}
302327

303328
private void cancelAnimator() {
329+
getViewHolder().getParent().removeCallbacks(mInAnimEndCallback);
330+
getViewHolder().getParent().removeCallbacks(mOutAnimEndCallback);
304331
if (mAnimatorIn != null) {
332+
mAnimatorIn.removeAllListeners();
305333
mAnimatorIn.cancel();
306334
mAnimatorIn = null;
307335
}
308336
if (mAnimatorOut != null) {
337+
mAnimatorOut.removeAllListeners();
309338
mAnimatorOut.cancel();
310339
mAnimatorOut = null;
311340
}

app/src/main/java/per/goweii/android/anylayer/NormalActivity.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,22 @@ public void onClick(@NonNull Layer layer, @NonNull View v) {
127127
.cancelableOnClickKeyBack(true)
128128
.onClickToDismiss(R.id.fl_dialog_no);
129129
dialog.show();
130-
dialog.dismiss();
130+
new Thread(new Runnable() {
131+
@Override
132+
public void run() {
133+
try {
134+
Thread.sleep(30);
135+
} catch (InterruptedException e) {
136+
e.printStackTrace();
137+
}
138+
runOnUiThread(new Runnable() {
139+
@Override
140+
public void run() {
141+
dialog.dismiss();
142+
}
143+
});
144+
}
145+
}).start();
131146
}
132147

133148
private Random mRandom = new Random();

0 commit comments

Comments
 (0)