Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 片段转换从右向左出现,从左向右消失(回到起始点)_Android_Android Fragments_Fragment Transitions - Fatal编程技术网

Android 片段转换从右向左出现,从左向右消失(回到起始点)

Android 片段转换从右向左出现,从左向右消失(回到起始点),android,android-fragments,fragment-transitions,Android,Android Fragments,Fragment Transitions,我想达到一个特定的片段转换行为,正如我在问题中提到的,我想让我的片段从右边出现,然后在相同的方向上消失,回到它开始的地方。。 以下是我的xml动画: right_to_left.xml: <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="1000" android:fromXDelta="100%" android:

我想达到一个特定的片段转换行为,正如我在问题中提到的,我想让我的片段从右边出现,然后在相同的方向上消失,回到它开始的地方。。 以下是我的xml动画:

right_to_left.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
    android:duration="1000"
    android:fromXDelta="100%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />
当片段消失时,方法1:

 fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.setCustomAnimations(R.anim.product_animation_exit, R.anim.product_animation_exit);
                transaction.remove(ProductDetailsFragment.this);
                transaction.commitAllowingStateLoss();
                MainActivity.transparent.setBackgroundColor(0x00000000);


            }
        });
当片段消失时,方法2:

fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.product_animation_exit);
                    animation.setDuration(getResources().getInteger(android.R.integer.config_mediumAnimTime));
                    animation.setAnimationListener(new Animation.AnimationListener() {
                        @Override
                        public void onAnimationStart(Animation animation) {

                        }

                        @Override
                        public void onAnimationEnd(Animation animation) {
                            try {
                                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                                transaction.remove(ProductDetailsFragment.this);
                                transaction.commitAllowingStateLoss();
                                MainActivity.transparent.setBackgroundColor(0x00000000);

                            } catch (Exception e) {
                            }

                        }

                        @Override
                        public void onAnimationRepeat(Animation animation) {

                        }
                    });

                    getView().startAnimation(animation);
                }
            });
不幸的是,没有一个像我预期的那样有效, 希望这张图片能解释更多我想要的:
提前谢谢你。

我建议,首先你要为问题的第一部分制定一个可行的解决方案,即在片段之间切换,然后再添加第二部分,即动画

1。切换片段

在XML布局文件中,取出属于片段的所有内容,并添加一个
Framelayout

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
然后有两种方法,一种用于添加第一个片段,另一种用于在两个片段之间来回切换

add方法如下所示:

void addFrag(int containerId, Fragment firstFragment){
        FragmentManager fragmentManager = activity.getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(containerId, firstFragment);
        transaction.commit();
}
void replaceFrag(int containerId, Fragment newFragment){
        FragmentManager fragmentManager = activity.getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(containerId, newFragment);
        transaction.commit();
}
替换方法如下所示:

void addFrag(int containerId, Fragment firstFragment){
        FragmentManager fragmentManager = activity.getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(containerId, firstFragment);
        transaction.commit();
}
void replaceFrag(int containerId, Fragment newFragment){
        FragmentManager fragmentManager = activity.getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(containerId, newFragment);
        transaction.commit();
}
只要传递正确的片段,就可以使用此方法将任何片段替换为另一个片段Edit您也可以仅使用
replaceFrag
方法,即使是第一次将片段添加到容器中编辑结束

2。动画

这真是容易的部分。您不需要创建自己的XML,因为滑动动画内置于Android中(所以使用我在这里提供的确切ID)。在添加或替换片段之前,只需添加一行代码:

编辑因为这些内置动画从50%开始,但在我看来,它们看起来不太好看。您只需使用XML即可:

transaction.setCustomAnimations(R.anim.left\u到右,R.anim.right\u到左)

编辑结束

void replaceFrag(int containerId, Fragment newFragment){
        FragmentManager fragmentManager = activity.getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(containerId, newFragment);
        transaction.commit();
}
transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);