相关疑难解决方法(0)

如何使用Fragments启动共享元素转换?

我正在尝试实现具有"共享元素"的片段之间的转换,如新材料设计规范中所述.我能找到的唯一方法是ActivityOptionsCompat.makeSceneTransitionAnimation,我认为它仅适用于Activity.我一直在寻找相同的功能,但有/片段.

android fragment material-design

58
推荐指数
3
解决办法
4万
查看次数

片段共享元素转换不适用于ViewPager

我的应用程序包含一个视图,其中包含一个由少量片段组成的ViewPager.单击其中一个片段中的项目时,预期的行为是共享元素(在本例中为图像)转换为片段,该片段显示有关所单击内容的更多信息.

这是一个非常简单的视频,它应该是什么样子:

https://dl.dropboxusercontent.com/u/97787025/device-2015-06-03-114842.mp4

这只是使用片段 - >片段转换.

将起始片段放在ViewPager中时会出现问题.我怀疑这是因为ViewPager使用其父片段的子片段管理器,它与处理片段事务的活动的片段管理器不同.这是一个发生了什么的视频:

https://dl.dropboxusercontent.com/u/97787025/device-2015-06-03-120029.mp4

我非常肯定这里的问题,因为我上面解释的是子片段管理器与活动的片段管理器.以下是我进行转换的方式:

SimpleFragment fragment = new SimpleFragment();

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.am_list_pane, fragment, fragment.getClass().getSimpleName());

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    TransitionSet enterTransition = new TransitionSet();
    enterTransition.addTransition(new ChangeBounds());
    enterTransition.addTransition(new ChangeClipBounds());
    enterTransition.addTransition(new ChangeImageTransform());
    enterTransition.addTransition(new ChangeTransform());

    TransitionSet returnTransition = new TransitionSet();
    returnTransition.addTransition(new ChangeBounds());
    returnTransition.addTransition(new ChangeClipBounds());
    returnTransition.addTransition(new ChangeImageTransform());
    returnTransition.addTransition(new ChangeTransform());

    fragment.setSharedElementEnterTransition(enterTransition);
    fragment.setSharedElementReturnTransition(returnTransition);

    transaction.addSharedElement(iv, iv.getTransitionName());
}

transaction.addToBackStack(fragment.getClass().getName());

transaction.commit();
Run Code Online (Sandbox Code Playgroud)

当两个片段都由活动的片段管理器管理时,这种方法很好,但是当我加载一个像这样的ViewPager时:

ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
pager.setAdapter(new Adapter(getChildFragmentManager()));
Run Code Online (Sandbox Code Playgroud)

ViewPager的子项不是由活动管理的,它不再起作用.

这是Android团队的疏忽吗?有什么办法可以解决这个问题吗?谢谢.

android android-viewpager android-transitions

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

共享元素转换与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
查看次数

共享元素转换无效

我只用这个问题做了一个github项目.你可以从这里看到它/克隆它/构建它:https://git.io/vMPqb


我试图让共享元素为Fragment转换工作.

项目中有两个FAB - 羽毛和平面.羽毛和飞机是共享元素.单击"羽化"时,将打开"SheetDialog","羽化"应为"平面"对话框设置动画.目前它没有这样做,我试图确定原因.

值得注意的是,我在API 24上运行此操作,因此在版本21以下不支持转换的问题不是问题.

任何人都可以告诉我为什么共享元素转换不起作用?

为了回应repo中的内容,有四个重要文件:

主要活动

package test.example.fabpop;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.transition.ChangeBounds;
import android.support.transition.Fade;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    FloatingActionButton fab_feather;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fab_feather = (FloatingActionButton) findViewById(R.id.initial_fab_feather);
    }

    public void fabClick(View view) {
        SheetDialog dialogFragment = new SheetDialog();

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        // This seemingly has no effect. I am trying to get it to work.
        transaction.addSharedElement(fab_feather, "transition_name_plane"); …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments android-dialogfragment

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