我知道了!
简短的回答:消除两个动画之一。从主要活动转到次要活动时,仅使用淡入。从次要活动转到主要活动时,仅使用淡出。详细信息和解释如下。
有几种方法可以将两种颜色与 alpha 值结合起来。该过程称为“阿尔法合成”。一种不常用的组合方式是:
(a) C = C1*alpha1 + C2*alpha2
如果应用了该组合方法,则使用两个线性插值器alpha1
和alpha2
将给出一个恒定的颜色,只要两者C1
都C2
等于“背景”颜色Cbg
。具体来说,如果alpha1 = t
(其中t
表示时间)alpha2 = 1-t
和C1 = C2 = Cbg
,则 (a) 的组合给出C = Cbg*t + Cbg*(1-t) = Cbg
。即,根据需要,合成颜色与C
无关。Cbg
t
但是,Android 应用的组合似乎是所谓的“over”运算符:
(b) C = C1*alpha1 + C2*alpha2*(1-alpha1)
认为有颜色的C1
像素超过了C2
。使用组合方法 (b),为了获得C
像素的恒定颜色,C1 = C2 = Cbg
就足够了alpha2 = 1
,因为C = Cbg*alpha1 + Cbg*1*(1-alpha1) = Cbg
.
因此,对于结束的活动,插值器应该是任何(线性或其他),对于在.1
由于我不确定 Android 如何决定哪个活动结束和哪个活动结束,所以我做了一些实验并发现:
所以看起来Android正在考虑次要活动超过主要活动。这是有道理的,因为辅助是由主创建的。
- 由于主要活动不必使用任何动画,根据文档,将其动画设置为
0
,即使用应该就足够了overridePendingTransition(R.anim.fadein, 0)
。但是,我发现这只有时有效。为了让它工作,我需要定义一个从 alpha 1.0 到 alpha 1.0 的“假”淡入淡出(这样它实际上什么都不做)并使用overridePendingTransition(R.anim.fadein, R.anim.fakefade)
.
至于需要假动画而不是0
动画,我没有解释。
我希望 Android 文档对此更清楚。这会为我节省不少时间。