活动/片段转换是不是与棒棒糖之前的设备兼容?
Posted
技术标签:
【中文标题】活动/片段转换是不是与棒棒糖之前的设备兼容?【英文标题】:Are Activity/Fragment Transitions compatible with pre-Lollipop devices?活动/片段转换是否与棒棒糖之前的设备兼容? 【发布时间】:2014-12-21 10:33:51 【问题描述】:我正在尝试在棒棒糖之前的设备 (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 实现了这个?
【问题讨论】:
如果您正在寻找一种在棒棒糖之前的方法,您可以使用此视频作为示例:youtube.com/watch?v=CPxkoe2MraA(请注意,它需要更多的工作才能实现)。 支持库 24.2.0 - developer.android.com/topic/libraries/support-library/… 有一个有希望的更新,带有 android.support.transition 包,但它是仅用于视图级的反向移植 API! 【参考方案1】:不,活动/片段转换在棒棒糖之前的设备上是不可能的。根据documentation:
如果可以的话,用额外的启动信息开始一个活动。
在 Android 4.1+ 中引入了其他选项,以允许对活动启动动画进行更多控制。应用程序可以将此方法与 ActivityOptionsCompat 一起使用,以便在可用时使用这些动画。在不存在此功能的平台版本上运行时,活动将正常启动。
另请参阅 George Mount 对this *** question 的回答。
【讨论】:
那么...如果活动/片段转换只能在 Lollipop 中实现,这是否意味着某些 Google 应用程序使用更复杂的方法(如您在问题评论中提供的那样)来实现转换?我真的很好奇 Google 日历和 Keep 如何让它在较低版本中工作.. Google 日历和 Google Keep 可能已经实现了自己的自定义库来执行此操作...没有支持棒棒糖前设备的官方 API。 你可以尝试自己实现一些东西,但谷歌没有提供向后兼容的库。 您帖子中的链接被替换是有原因的:Blacklist the use of common link shorteners in posts。 This is being discussed on meta【参考方案2】:有一个支持库,但它不支持(所有)低于 5.0 的 Android 版本的转换。不过也有一些选择:
非官方兼容库https://github.com/andkulikov/transitions-everywherehttps://github.com/takahirom/PreLollipopTransitionhttps://github.com/lgvalle/Material-Animations
Android KitKathttp://www.doubleencore.com/2013/11/new-transitions-framework/ 和一个 在您的 SDK 示例文件夹中找到示例。
之前在此处发布了此问题的副本:https://***.com/a/27344471/1683141
【讨论】:
【参考方案3】:虽然花哨的 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());
【讨论】:
【参考方案4】:您可以查看此库,了解棒棒糖前设备的活动和片段转换
dependencies
compile 'com.albinmathew:PreLollipopTransition:1.1.2'
https://github.com/albinmathew/PreLollipopTransition
【讨论】:
以上是关于活动/片段转换是不是与棒棒糖之前的设备兼容?的主要内容,如果未能解决你的问题,请参考以下文章