幻灯片活动转换中的Android错误

时间:2015-05-06 17:36:35

标签: android animation transition slide

因此,在尝试使用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。

1 个答案:

答案 0 :(得分:22)

这是一个在API 21设备上崩溃的问题。 原因是API 21中Slide的初始版本仅支持LEFTTOPRIGHTBOTTOM重力。

Slide source from API 21

Slide source from API 22

解决此问题的一种方法是使用GravityCompat中的Support Library

new Slide(GravityCompat.getAbsoluteGravity(GravityCompat.START, getResources().getConfiguration().getLayoutDirection()));

getAbsoluteGravity()方法接受首选引力(STARTEND)和当前布局方向,并将重力作为LEFTRIGHT返回为适合当前配置。