Fragment的实现
- 对于Fragment的控制相对简单
- 不涉及window的控制,只是View级别的操作
- 实现View跟随手势滑动移动的效果
- 实现手势结束后判断取消或返回执行归位动画
Activity的实现
处理好window的控制
修改activity的style属性:
1
2
3
4<style name="AppTranslucentTheme" parent="AppTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
Activity联动(多个activity栈)
Activity A和Activity C在Task#0
Activity B在Task#1
当Activity A跳转Activity B时没有问题(有动画效果)
再当Activity B跳转Activity C时,会先出现Activity A,然后动画效果到Activity C
处理方法:再Activity B跳转Activity C的时候将B页面整体截屏放到Activity C的下面。
获取Activity的栈:
1
2
3
4
5
6
7
8
9Activity.java
public int getTaskId() {
try {
return ActivityManager.getService()
.getTaskForActivity(mToken, false);
} catch (RemoteException e) {
return -1;
}
}
Activity透明对生命周期的影响
1 | graph TB |
A、B、C、D四个Activity依次跳转,此时Activity栈中:A->B->C->D。(默认都不透明)
- 如果D为不透明Activity,那么:D为Resumed状态(可操作),ABC为Created状态(不可见)。
- 如果D为透明Activity,那么:D为Resumed状态(可操作),C为Started状态(可见,不可操作),AB为Created状态(不可见)
- 如果C、D为透明Activity,那么::D为Resumed状态(可操作),B、C为Started状态(可见,不可操作),A为Created状态(不可见)