我知道了!
简短的回答:消除两个动画之一。从主要活动转到次要活动时,仅使用淡入。从次要活动转到主要活动时,仅使用淡出。详细信息和解释如下。
有几种方法可以将两种颜色与 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无关。Cbgt
但是,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 文档对此更清楚。这会为我节省不少时间。