因此,在尝试使用Slide
活动转换但具有不同的重力时,应用程序在使用Gravity.START
时崩溃,使用此:
getWindow().setExitTransition(new Slide(Gravity.START));
我收到此错误:
IllegalArgumentException:无效的幻灯片方向
但是如果查看源代码,上面的特定构造函数会调用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语句中执行默认情况,唯一的解释是它是一个bug。
我会向Google报告,但他们没有公开的方式来报告此类API错误,在这种情况下,修复错误并不是很明显。所以,对任何想要使用重力为START
的幻灯片动画的人来说都是PSA。
答案 0 :(得分:22)
这是一个在API 21设备上崩溃的问题。
原因是API 21中Slide
的初始版本仅支持LEFT
,TOP
,RIGHT
和BOTTOM
重力。
解决此问题的一种方法是使用GravityCompat中的Support Library。
new Slide(GravityCompat.getAbsoluteGravity(GravityCompat.START, getResources().getConfiguration().getLayoutDirection()));
getAbsoluteGravity()
方法接受首选引力(START
或END
)和当前布局方向,并将重力作为LEFT
或RIGHT
返回为适合当前配置。