Android 过渡赢得';不动

Android 过渡赢得';不动,android,android-animation,android-transitions,Android,Android Animation,Android Transitions,我有一个以ImageView为中心的RelativeLayout: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/splashActivity_root"

我有一个以ImageView为中心的RelativeLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/splashActivity_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.yarkoni.anybody.activities.SplashScreenActivity">

    <ImageView
        android:id="@+id/splashActivity_logo"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="top"
        android:layout_margin="@dimen/spacing_medium"
        android:layout_centerInParent="true"
        android:background="@color/colorAccent" />

</RelativeLayout>
如果没有过渡布局,则如下所示:

随着过渡,布局如下所示:

问题是动画实际上并没有出现,而ImageView只是立即出现在底部

编辑1:

以下内容修复了该问题:

mRoot.post(new Runnable() {
    @Override
    public void run() {

        TransitionManager.beginDelayedTransition(mRoot, new ChangeBounds().addTarget(mLogoIV).setStartDelay(1000).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(5000));
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mLogoIV.getLayoutParams();
        params.removeRule(RelativeLayout.CENTER_IN_PARENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        params.addRule(RelativeLayout.CENTER_HORIZONTAL);
        mLogoIV.setLayoutParams(params);

    }
});
但现在我的问题是,为什么在使用handler时它仍然不起作用:

new Handler().post(new Runnable() {
    @Override
    public void run() {

        TransitionManager.beginDelayedTransition(mRoot, new ChangeBounds().addTarget(mLogoIV).setStartDelay(1000).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(5000));
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mLogoIV.getLayoutParams();
        params.removeRule(RelativeLayout.CENTER_IN_PARENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        params.addRule(RelativeLayout.CENTER_HORIZONTAL);
        mLogoIV.setLayoutParams(params);

    }
});

尝试使用postDelayed()-在视图自身构建时设置动画可能很棘手您是否尝试在onCreate()中运行该代码?如果是这样的话,动画可能无法像它正在运行的布局一样运行。将其与视图一起发布是有效的,因为它是在视图完全运行后执行的。因此,如果您试图将其与处理程序一起使用,请将其延迟100毫秒左右。另外,如果您正在运行它,并且您的活动刚刚开始,那么它在7.0之前不会工作。请参阅这篇文章了解更多信息。()@SamvidMistry谢谢你,我也有类似的问题,这就解决了。
new Handler().post(new Runnable() {
    @Override
    public void run() {

        TransitionManager.beginDelayedTransition(mRoot, new ChangeBounds().addTarget(mLogoIV).setStartDelay(1000).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(5000));
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mLogoIV.getLayoutParams();
        params.removeRule(RelativeLayout.CENTER_IN_PARENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        params.addRule(RelativeLayout.CENTER_HORIZONTAL);
        mLogoIV.setLayoutParams(params);

    }
});