因此,在尝试使用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的初始版本仅支持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返回。

关于android - 幻灯片 Activity 过渡中的Android错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30083820/

10-10 14:42