Sou*_*ion 7 android fragment-transitions
我正在RecyclerView中的项目之间实现片段转换动画,以及显示所单击项目的详细信息的片段.换句话说,比较常见......
"点击列表中的卡片,它会扩展到详细视图,而列表的其余部分消失"
...之类的事情.
从RecyclerView项目到详细视图的转换工作正常.项目的共享元素正在转换到新状态,而其余的RecyclerView项目则逐渐消失.
但是,当弹出BackStack时,共享元素会转换回旧状态,但其他RecyclerView项目不会淡入.它们会立即出现在动画的开头,正如您在此屏幕视频中看到的那样
该活动处理了相当多的片段,因此我使用以下通用方法进行事务处理:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void setFragment(int fragId, Bundle args, List<Pair> transitionViews,
String tag, int containerId) {
// Setup the new fragment and transaction
Fragment newFragment = FragmentFactory.newFragment(fragId, args);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(containerId, newFragment, tag);
fragmentTransaction.addToBackStack(tag);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && transitionViews != null) {
// Add the shared elements
for (int i = 0; i < transitionViews.size(); i++) {
final Pair pair = transitionViews.get(i);
fragmentTransaction.addSharedElement((View) pair.first, (String) pair.second);
}
// Setup the transitions
Transition transitionMove = TransitionInflater.from(this).inflateTransition(android.R.transition.move);
Transition transitionFade = TransitionInflater.from(this).inflateTransition(android.R.transition.fade);
// transitionFade.setDuration(500); // Slow down the transition to help see what's happening
// Apply the relevant transitions to each fragment
newFragment.setSharedElementEnterTransition(transitionMove);
newFragment.setEnterTransition(transitionFade);
newFragment.setExitTransition(transitionFade);
mCurrentFragment.setExitTransition(transitionFade);
mCurrentFragment.setReenterTransition(transitionFade);
mCurrentFragment.setSharedElementReturnTransition(transitionMove);
}
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
我在这个主题上找到了http://www.androiddesignpatterns.com/2014/12/activity-fragment-transitions-in-android-lollipop-part1.html博客,而brockoli的示例代码非常有用,但一直无法解决问题.
也许这是我对每次转换的理解的问题?
这是我理解它的方式.
我mCurrentFragment和我newFragment有5个不同的转换设置器:
setSharedElementEnterTransition 设置将用于传输到内容场景的共享元素的Transition.setSharedElementReturnTransition设置将用于在后端堆栈弹出期间传回的共享元素的Transition .setEnterTransition 设置将用于将视图移动到初始场景的Transition.setExitTransition设置当不弹出后端堆栈时删除,隐藏或分离片段时,将用于将视图移出场景的Transition .setReenterTransition设置由于弹出后端堆栈而在返回时用于将视图移动到场景中的Transition .setFragment调用我的方法时,将播放一个动画mCurrentFragment,newFragment其中包含以下属性:
newFragmentSharedElementEnterTransition定义了如何共享元素会过渡到newFragment.newFragmentEnterTransition定义如何剩余newFragment这些子视图不是共享的元件将转变到屏幕上.mCurrentFragmentExitTransition定义如何mCurrentFragment被子视图不是共享的元件将关闭屏幕的转换.mCurrentFragment只包含RecyclerView,因此效果是其余的RecyclerView元素在后台逐渐消失)弹出BackStack时,我希望会发生以下情况:
mCurrentFragment定义共享元素将如何转换回mCurrentFragment.newFragment定义不共享元素的newFragment子视图将如何从屏幕转换.
(在我的情况下,底部的ToolBar淡出)mCurrentFragment定义非共享元素的剩余mCurrentFragment子视图将如何转换回屏幕.
(在我的情况下,其他RecyclerView项目应该淡入,但这不会发生.它们在转换共享元素后立即可见).我误解了什么吗?
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |