我试图在片段之间进行共享元素转换,当使用replace()添加第二个片段时一切正常,但是在代码库add()中使用了很多,但是当使用它时,转换只是跳到结束值
是否有可能在添加的片段之间进行转换? 谢谢
@Override
public void onClick(View v) {
setSharedElementReturnTransition(TransitionInflater.from(getActivity())
.inflateTransition(android.R.transition.move));
FragmentB secondFragment = new FragmentB();
secondFragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity())
.inflateTransition(android.R.transition.move));
getFragmentManager().beginTransaction()
.add(R.id.container, secondFragment)
.addToBackStack(null)
.addSharedElement(imageView, imageView.getTransitionName())
.commit();
}
Run Code Online (Sandbox Code Playgroud) 新的共享元素转换工作时,我使用的片段" 替代 ",但我似乎无法使它发挥片段" 添加 ".我在两种情况下使用相同的容器.
更多细节:
活动 - 布局 - >
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00ffff"
android:orientation="vertical" >
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
在启动Activity时,我将Fragment1添加到屏幕上
getFragmentManager().beginTransaction().replace(R.id.container,new TransitionTestFragment1(), "TransitionTestFragment1").commit();
Run Code Online (Sandbox Code Playgroud)
在Fragment1布局中的视图的单击事件 - >我将Fragment2添加到屏幕.我在第一个Fragment的onCreateView中设置了监听器
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final TransitionSet transitionSet = new TransitionSet();
transitionSet.addTransition(new ChangeImageTransform());
transitionSet.addTransition(new ChangeBounds());
transitionSet.addTransition(new ChangeTransform());
transitionSet.setDuration(300);
View v=inflater.inflate(R.layout.fragment1, null);
final View image=v.findViewById(R.id.image);
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setSharedElementReturnTransition(transitionSet);
Fragment fragment = new TransitionTestFragment2();
fragment.setSharedElementEnterTransition(transitionSet);
FragmentTransaction ft = getFragmentManager().beginTransaction()
.replace(R.id.container, fragment) …Run Code Online (Sandbox Code Playgroud) android android-fragments shared-element-transition fragment-transitions
我正在尝试将RecyclerView中所选项目的2个简单视图设置为新片段.我已经查看了很多将共享元素从一个Activity动画到另一个Activity的示例,但很少有动画将共享元素从一个Fragment动画到同一个Activity中的另一个Fragment的示例.它几乎可以工作.
这是我的结构.
活动
- 使用RecyclerView的全屏Fragment1
- 带有详细信息的全屏Fragment2
当用户在Fragment1中的RecyclerView中选择一个项目时,我将Fragment1替换为具有View的Fragment2,其中包含不同位置和大小的共享元素.
要使它工作有一些技巧,你必须确保你的transitionName对于列表中的每个项都是唯一的,当然,transitionName必须与Fragment2中元素的transitionName匹配才能播放动画.我有这个部分工作,当我选择一个项目时,2个共享视图会动画,而不是在2个活动之间进行动画时的预期.
如果我在屏幕底部附近选择一个项目,它会绘制View for Fragment2并为2个共享视图设置动画,就好像它们位于屏幕顶部的项目中一样.难以解释.这是一些照片
片段1

Fragment2

在这两个片段中我都设置了以下内容
setSharedElementEnterTransition(new ChangeBounds());
setSharedElementReturnTransition(new ChangeBounds());
setAllowEnterTransitionOverlap(true);
setAllowReturnTransitionOverlap(true);
Run Code Online (Sandbox Code Playgroud)
同样在他们的onCreate()中的父Activity中我已经设置了
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Run Code Online (Sandbox Code Playgroud)
知道为什么我的共享元素动画从我的屏幕顶部开始,即使它们是在屏幕底部的选定项目中开始的吗?
android android-fragments shared-element-transition fragment-transitions android-recyclerview
我有2个片段ListMovieFragment和DetailMovieFragment.
我有一个接口,在ListMovieFragment该实现MainActivity.我正在使用共享元素转换; 当我点击图像视图ListMovieFragment中onMovieSelected被称为中MainActivity.
从ListMovieFragment作品过渡.
但是当我单击back按钮时,从DetailMovieFragmentListMovieFragment 转换到ListMovieFragment无法正常工作.
这是MainActivity.我想我有一个错误的组合来设置片段的转换.
public class MainActivity extends AppCompatActivity implements ListMovieFragment.MovieSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState == null) {
ListMovieFragment listMovieFragment = new ListMovieFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.activity_main, listMovieFragment, ListMovieFragment.TAG);
fragmentTransaction.commit();
}
}
@Override
public void onMovieSelected(int movieId) {
DetailMovieFragment detailMovieFragment =
(DetailMovieFragment)getSupportFragmentManager().findFragmentByTag(DetailMovieFragment.TAG);
/* Create a new DetailMovieFragment if not exits …Run Code Online (Sandbox Code Playgroud) android android-fragments android-transitions fragment-transitions
在Android Lollipop中,Activity#postponeEnterTransition()和Activity#startPostponedEnterTransition()方法使Activity能够延迟开始进入和退出共享元素转换,直到加载所有数据.这些非常适合Activity过渡.
有没有办法在使用Fragment过渡时达到相同的效果?
android android-5.0-lollipop activity-transition shared-element-transition 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 …Run Code Online (Sandbox Code Playgroud) 我在我的片段类中调用它:
@OnClick(R.id.blockedLinkLayout)
public void onBlockedClick(){
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, new SettingsBlockedUsersFragment(), FRAGMENT_TAG);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
它只是用选择的片段替换我当前的片段.
我的问题是,如何String使用FragmentTransaction从我的父片段向我的子片段发送一些数据(例如值)?
android send android-fragments android-bundle fragment-transitions
我在两个片段之间的共享元素转换正常工作.但是,问题是我不想隐藏第一个片段 - 我希望它显示在新添加的第二个片段下面.如果我不在ft.hide( firstFragment )我FragmentTransaction的共享元素中包含转换将不会运行.
如何进行共享元素转换以保持两个片段可见?
android android-fragments shared-element-transition fragment-transitions
假设我们有两个片段:A和B
A 是可见的,我们要替换为 B
A有一个exitTransition,B有一个enterTransition
这两个过渡都定义了TransitionPropagation,它们用于延迟某些动画。那些通过TransitionPropagations收集启动延迟所需的值captureValues。
将交易从提交A到时的期望B:
TransitionPropagation.captureValues被称为来自所有相关视图A的布局为exitTransition的ATransitionPropagation.captureValues被称为来自所有相关视图B的布局为enterTransition的B我看到:
TransitionPropagation.captureValues被称为从所有相关意见A的布局为exitTransition的A,然后TransitionPropagation.captureValues也被称为上意见相同的传播在B的布局中定义的。
这是怎么回事 为什么欣赏到B定向到exitTransition的A?
android android-animation android-layout android-transitions fragment-transitions
我通常自己解决问题,但这次我真的很生气,找不到合适的解决办法。
设想:
我有两个片段让我们说A和B。
在片段 A 中,我从 Rest API 填充 RecyclerView(后来只有 RV)。
在片段 B 中,我有 CollapsingToolbarLayout 的“详细视图”。
当我单击RV 中的项目时,我正在打开带有过渡的片段 B和一个共享元素,即AppCompatImageView,我在其中设置了本地可绘制对象。在片段 B 中是CollapsingToolbarLayout 中的图像。
共享元素转换在片段 B 中有效 - 图像移动正确。当我单击后退按钮并且图像移回其在 RV 中的原始位置时,过渡也有效。
但是这里出现了一个我无法解决的问题。在两个片段中,特定图像都被卡在位置上,当我滚动 RV 或 CollapsingToolbarLayout 视图时,视图没有改变 - 在片段 A 中,滚动 RV 时图像没有移动,而在片段 B 中,图像在折叠/展开更改时没有隐藏。
有没有人遇到过这个问题,因为我不并且真的不理解这种行为。经过多年的发展,我从未发生过。
这是从片段 B 返回后片段 A 的屏幕截图:
在这里,我正在执行带有转换的片段事务:
fun replaceFragmentWithTransition(context: Context,
sharedElement: View,
fm: FragmentManager?,
layoutContainer: Int,
fragment: Fragment, …Run Code Online (Sandbox Code Playgroud) 在MVVMCross很容易开发Activity转换,但我发现很多麻烦试图用片段开发它.
我有一个汉堡菜单的应用程序,我想能够编辑我自己的片段之间的过渡.我一直在网上搜索,但我找不到任何解决方案.
感谢您的关注.
android android-fragments mvvmcross xamarin fragment-transitions