【问题标题】: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 实现了这个?

【问题讨论】:

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


【解决方案1】:

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

如果可以的话,用额外的启动信息开始一个活动。

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

另请参阅 George Mount 对this StackOverflow question 的回答。

【讨论】:

  • 那么...如果活动/片段转换只能在 Lollipop 中实现,这是否意味着某些 Google 应用程序使用更复杂的方法(如您在问题评论中提供的那样)来实现转换?我真的很好奇 Google 日历和 Keep 如何让它在较低版本中工作..
  • Google 日历和 Google Keep 可能已经实现了自己的自定义库来执行此操作...没有支持棒棒糖前设备的官方 API。
  • 你可以尝试自己实现一些东西,但谷歌没有提供向后兼容的库。
  • 您帖子中的链接被替换是有原因的:Blacklist the use of common link shorteners in posts。
【解决方案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

【讨论】:

    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-11
        • 2018-09-01
        • 1970-01-01
        • 2023-03-21
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多