34

我正在尝试在棒棒糖之前的设备 (4.x) 上使用共享元素进行活动转换。可能吗?到目前为止,我正在尝试这个:

public class RewardDetail extends ActionBarActivity {
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        ...

        ViewCompat.setTransitionName(imageView, TRANSITION_NAME);
    }

    ...

    public static void launch(ActionBarActivity activity, View transitionView, WelcomeReward detailData) {
        ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, TRANSITION_NAME);
        Intent intent = new Intent(activity, RewardDetail.class);
        intent.putExtra(PARAM_DATA, detailData);
        ActivityCompat.startActivity(activity, intent, options.toBundle());
    }
}

调用者:

@Override
public void onClick(final View v) {
    int position = recyclerView.getChildPosition(v);
    WelcomeReward welcomeReward = data.get(position);
    RewardDetail.launch(WelcomeRewardActivity.this, v.findViewById(R.id.reward_view), welcomeReward);
}

但它会导致“常规”转换(没有共享元素)。有任何想法吗?

编辑

根据这个视频,它可以做到:

https://www.youtube.com/watch?v=RhiPJByIMrM&index=8&list=WL

是否有一个图书馆已经为 pre Lollipop 实现了这个?

4

4 回答 4

19

不,活动/片段转换在棒棒糖之前的设备上是不可能的。根据文档

如果可以的话,使用其他启动信息开始一项活动。

在 Android 4.1+ 中引入了额外的选项,以允许对活动启动动画进行更多控制。应用程序可以将此方法与 ActivityOptionsCompat 一起使用,以便在可用时使用这些动画。在不存在此功能的平台版本上运行时,活动将正常启动。

另请参阅 George Mount对此 StackOverflow 问题的回答。

于 2014-10-26T00:25:53.300 回答
8

您可以查看此库以了解 pre lollipop 设备的活动和片段转换

dependencies {
        compile 'com.albinmathew:PreLollipopTransition:1.1.2'
}

https://github.com/albinmathew/PreLollipopTransition

于 2015-05-28T09:36:15.033 回答
2

有一个支持库,但它不支持 5.0 以下 Android 版本的(所有)转换。然而,有一些替代方案:

非官方兼容性库
https://github.com/andkulikov/transitions-everywhere
https://github.com/takahirom/PreLollipopTransition
https://github.com/lgvalle/Material-Animations

Android KitKat
http://www.doubleencore.com/2013/11/new-transitions-framework/以及在您的 SDK 示例文件夹中找到的示例。

之前在此处发布此问题的副本:https ://stackoverflow.com/a/27344471/1683141

于 2016-01-29T11:52:02.257 回答
2

虽然花哨的 Lollipop Activity/Fragment 转换在 Lollipop 之前不可用(不使用 3rd 方库),但您仍然可以覆盖用于在 Activity 之间转换的动画。

就在您开始调用 startActivity() 之前/之后,您可以调用 [Activity.overridePendingTransition]( http://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int , int))。当你离开你的活动时,调用相同的方法。

同样,您可以使用 ActivityOptionsCompat 定义要在转换期间使用的自定义动画。

ActivityOptionsCompat opts =
    ActivityOptionsCompat.makeCustomAnimation(getActivity(), R.anim.in, R.anim.out);
startActivity(intent, opts.toBundle());
于 2015-11-17T23:22:26.443 回答