因此,在尝试使用Slide
Activity 过渡但具有不同的引力的情况下,应用程序使用Gravity.START
崩溃,原因是:
getWindow().setExitTransition(new Slide(Gravity.START));
我得到这个错误:
但是,如果您查看源代码,上面的特定构造函数将调用
setSlideEdge()
,在这种情况下,该方法将通过switch语句来设置您之前指定的Gravity:switch (slideEdge) {
case Gravity.LEFT:
mSlideCalculator = sCalculateLeft;
break;
case Gravity.TOP:
mSlideCalculator = sCalculateTop;
break;
case Gravity.RIGHT:
mSlideCalculator = sCalculateRight;
break;
case Gravity.BOTTOM:
mSlideCalculator = sCalculateBottom;
break;
case Gravity.START:
mSlideCalculator = sCalculateStart;
break;
case Gravity.END:
mSlideCalculator = sCalculateEnd;
break;
default:
throw new IllegalArgumentException("Invalid slide direction");
}
Gravity.LEFT
可以正常工作,但是因为我想要RTL支持,所以改为使用Gravity.START
才有意义。我对为什么在此switch语句中执行默认情况感到困惑,并且对此的唯一解释是它是一个错误。我已将其报告给Google,但他们没有公开的方法来报告此类API错误,在这种情况下,该错误并不十分明显。因此,向任何希望使用Gravity为
START
的Slide动画的人提供PSA。 最佳答案
这是在API 21设备上崩溃的问题。
原因是API 21中的Slide
的初始版本仅支持LEFT
,TOP
,RIGHT
和BOTTOM
重力。
Slide source from API 21
Slide source from API 22
解决此问题的一种方法是使用GravityCompat中的Support Library。
new Slide(GravityCompat.getAbsoluteGravity(GravityCompat.START, getResources().getConfiguration().getLayoutDirection()));
getAbsoluteGravity()
方法采用首选重力(START
或END
)和当前布局方向,并根据当前配置将重力作为LEFT
或RIGHT
返回。关于android - 幻灯片 Activity 过渡中的Android错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30083820/