【问题标题】:Android ViewPager CrossFade animationAndroid ViewPager CrossFade 动画
【发布时间】:2017-11-07 20:14:42
【问题描述】:
我为 android 实现了一个 BottomNavigation 视图,并且我有一些片段要显示为 BottomNavigation 页面。根据Google Material Design Guide Lines,我想展示带有交叉淡入淡出动画的片段。
通过触摸 BottomNavigation 的项目,我的 ViewpPager 会使用默认幻灯片动画更改片段。
我在this 和this 中阅读了一些解决方案。但这些并不是真正的淡入淡出动画,我无法设置淡入淡出的持续时间。
那么有什么方法可以在更改 ViewPager 的选项卡时设置动画?
【问题讨论】:
标签:
android
android-viewpager
android-animation
【解决方案1】:
终于,我找到了答案。
我使用布局更改了 ViewPager 以保留我的片段(框架布局)。然后我将片段添加到 fragmentTransaction 中。
通过在 BottomNavigation 上触摸项目,当前片段会隐藏,新片段会以在 fragmentTransaction 中定义的淡入淡出动画显示。
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_page);
addFragmentsToManager();
}
private void addFragmentsToManager() {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
fragmentTransaction.add(R.id.flContent, tripFragment, tripFragment.getClass().getSimpleName());
fragmentTransaction.add(R.id.flContent, notificationFragment, notificationFragment.getClass().getSimpleName());
fragmentTransaction.add(R.id.flContent, searchFragment, searchFragment.getClass().getSimpleName());
fragmentTransaction.add(R.id.flContent, profileFragment, profileFragment.getClass().getSimpleName());
fragmentTransaction.hide(tripFragment);
fragmentTransaction.hide(notificationFragment);
fragmentTransaction.hide(searchFragment);
fragmentTransaction.hide(profileFragment);
fragmentTransaction.commit();
}
private void changeTab(int position) {
Fragment fragment;
switch (position) {
fragment = .....// get framgnet from position
}
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
fragmentTransaction.hide(prvFragment);
fragmentTransaction.show(fragment).commit();
prvFragment = fragment;
}
【解决方案2】:
添加和隐藏片段有问题。
当应用程序处于空闲状态并且手机进入睡眠模式时,如果您返回应用程序,则所有片段都显示在活动中,并且您会看到所有布局合二为一。