标签: fragment-transitions

片段共享元素转换与add()而不是replace()?

我试图在片段之间进行共享元素转换,当使用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)

android shared-element-transition fragment-transitions

33
推荐指数
2
解决办法
2400
查看次数

共享元素转换与FragmentTransaction.replace()一起使用但不适用于FragmentTransaction.add()

新的共享元素转换工作时,我使用的片段" 替代 ",但我似乎无法使它发挥片段" 添加 ".我在两种情况下使用相同的容器.

更多细节:

活动 - 布局 - >

<?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

24
推荐指数
2
解决办法
4091
查看次数

在片段之间动画的共享元素

我正在尝试将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

20
推荐指数
1
解决办法
9184
查看次数

使用片段共享转换时,返回转换无法正常工作

我有2个片段ListMovieFragmentDetailMovieFragment.

我有一个接口,在ListMovieFragment该实现MainActivity.我正在使用共享元素转换; 当我点击图像视图ListMovieFragmentonMovieSelected被称为中MainActivity.

ListMovieFragment作品过渡.
但是当我单击back按钮时,从DetailMovieFragmentListMovieFragment 转换到ListMovieFragment无法正常工作.

什么是错的gif

这是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

20
推荐指数
1
解决办法
1243
查看次数

如何在Android Lollipop中推迟片段的输入转换?

在Android Lollipop中,Activity#postponeEnterTransition()Activity#startPostponedEnterTransition()方法使Activity能够延迟开始进入和退出共享元素转换,直到加载所有数据.这些非常适合Activity过渡.

有没有办法在使用Fragment过渡时达到相同的效果?

android android-5.0-lollipop activity-transition shared-element-transition fragment-transitions

17
推荐指数
1
解决办法
7494
查看次数

Fragment ReenterTransition无效.需要帮助澄清各种片段转换

我正在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)

android fragment-transitions

7
推荐指数
0
解决办法
748
查看次数

使用FragmentTransaction将数据发送到片段

我在我的片段类中调用它:

@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

7
推荐指数
1
解决办法
1万
查看次数

共享元素两个片段之间的转换,保持第一个片段可见

我在两个片段之间的共享元素转换正常工作.但是,问题是我不想隐藏第一个片段 - 我希望它显示在新添加的第二个片段下面.如果我不在ft.hide( firstFragment )FragmentTransaction的共享元素中包含转换将不会运行.

如何进行共享元素转换以保持两个片段可见?

android android-fragments shared-element-transition fragment-transitions

7
推荐指数
0
解决办法
211
查看次数

TransitionPropagation是否按预期工作?

假设我们有两个片段:AB

A 是可见的,我们要替换为 B

A有一个exitTransitionB有一个enterTransition

这两个过渡都定义了TransitionPropagation,它们用于延迟某些动画。那些通过TransitionPropagations收集启动延迟所需的值captureValues

将交易从提交A到时的期望B

  1. TransitionPropagation.captureValues被称为来自所有相关视图A的布局为exitTransitionA
  2. TransitionPropagation.captureValues被称为来自所有相关视图B的布局为enterTransitionB

我看到: TransitionPropagation.captureValues被称为从所有相关意见A的布局为exitTransitionA,然后TransitionPropagation.captureValues也被称为上意见相同的传播在B的布局中定义的。

这是怎么回事 为什么欣赏到B定向到exitTransitionA

android android-animation android-layout android-transitions fragment-transitions

6
推荐指数
0
解决办法
115
查看次数

带有 RecyclerView 的 Fragment 中的 Android 10 (Q) 过渡共享元素视图卡在固定位置

我通常自己解决问题,但这次我真的很生气,找不到合适的解决办法。

设想:

我有两个片段让我们说AB

片段 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)

android android-transitions fragment-transitions

6
推荐指数
1
解决办法
863
查看次数

使用MVVMCross在Android中进行片段转换

在MVVMCross很容易开发Activity转换,但我发现很多麻烦试图用片段开发它.

我有一个汉堡菜单的应用程序,我想能够编辑我自己的片段之间的过渡.我一直在网上搜索,但我找不到任何解决方案.

感谢您的关注.

android android-fragments mvvmcross xamarin fragment-transitions

3
推荐指数
1
解决办法
851
查看次数