活动/片段转换是否与pre-Lollipop设备兼容?

时间:2014-10-25 21:23:32

标签: java android material-design activity-transition shared-element-transition

我正在尝试使用前Lollipop设备(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

是否有一个库已经为Lollipop前实现了这个?

4 个答案:

答案 0 :(得分:18)

不,活动/片段在Lollipop前设备上无法进行转换。根据{{​​3}}:

  

如果能够,请使用其他发布信息开始活动。

     

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

另见George Mount对documentation的回答。

答案 1 :(得分:8)

您可以查看此库以获取棒棒糖前设备的活动和片段转换

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

https://github.com/albinmathew/PreLollipopTransition

答案 2 :(得分:2)

虽然Lollipop前没有花哨的Lollipop Activity / Fragment过渡(不使用第三方库),但你仍然可以覆盖用于在活动之间转换的动画。

在开始调用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());

答案 3 :(得分: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/和a   您的SDK示例文件夹中找到的示例。

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