我正在尝试使用前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前实现了这个?
答案 0 :(得分:18)
不,活动/片段在Lollipop前设备上无法进行转换。根据{{3}}:
如果能够,请使用其他发布信息开始活动。
在Android 4.1+中引入了其他选项,以便更多地控制活动启动动画。应用程序可以将此方法与ActivityOptionsCompat一起使用,以便在可用时使用这些动画。当在不存在此功能的平台版本上运行时,活动将正常启动。
另见George Mount对documentation的回答。
答案 1 :(得分:8)
您可以查看此库以获取棒棒糖前设备的活动和片段转换
dependencies {
compile 'com.albinmathew:PreLollipopTransition:1.1.2'
}
答案 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-AnimationsAndroid KitKat
http://www.doubleencore.com/2013/11/new-transitions-framework/和a 您的SDK示例文件夹中找到的示例。
此前发布此问题的副本:https://stackoverflow.com/a/27344471/1683141