简体   繁体   English

Android:将“ ViewPager”动画从片段更改为片段

[英]Android: Changing “ViewPager” animation from Fragment to Fragment

I am having an application with few fragments. 我的应用程序片段很少。 I am using ViewPager and I have an expectation of providing a different animation for ViewPager transactions. 我正在使用ViewPager并且期望为ViewPager事务提供不同的动画。 Below is my code. 下面是我的代码。

public class MainActivity extends FragmentActivity {

    private ViewPager viewPager;
    private int counterNumber=-1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewPager=(ViewPager)findViewById(R.id.viewPager);
        viewPager.setAdapter(new MyPagerAdapter2(getSupportFragmentManager()));
        viewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (viewPager.getCurrentItem() == 0) {
                    counterNumber=0;
                    return true;
                }

                if (viewPager.getCurrentItem() == 1) {
                    counterNumber=1;
                    return true;
                }

                if (viewPager.getCurrentItem() == 2) {
                    counterNumber=2;
                    return true;
                }

                if (viewPager.getCurrentItem() == 3) {
                    counterNumber=3;
                    return true;
                }

                if (viewPager.getCurrentItem() == 4) {
                    counterNumber=4;
                    return true;
                }

                return false;
            }
        });

        viewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(View page, float position) {

                page.setRotation(position*-100);

            }
        });

    }

    private class MyPagerAdapter2 extends FragmentPagerAdapter {


        public MyPagerAdapter2(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int pos) {
            switch(pos) {

                case 0: counterNumber=0; return FirstFragment1.newInstance("FirstFragment_1");
                case 1: counterNumber=1;return SecondFragment1.newInstance("SecondFragment_1");
                case 2: counterNumber=2;return ThirdFragment1.newInstance("ThirdFragment_1");
                case 3: counterNumber=3;return FourthFragment1.newInstance("FourthFragment_1");
                case 4: counterNumber=4;return FifthFragment1.newInstance("FifthFragment_1");
                default: return FirstFragment1.newInstance("DefaultFragment_1");
            }
        }

        @Override
        public int getCount() {
            return 5;
        }
    }

    public void setCurrentItem(int which) {
        if(viewPager != null && which >= 0 && which <= 4) {
            viewPager.setCurrentItem(which);
        }
    }
}

However, I do not need same animation to all the screens. 但是,我不需要所有屏幕都具有相同的动画。 However I only want this custom animation in some cases, like when you are coming back from 4th screen into 3rd screen. 但是,在某些情况下,例如在您从第4屏幕返回第3屏幕时,我只需要此自定义动画。 Or else when a button is called in 3rd screen which is instructed to navigate back to 1st screen. 否则,当在第三屏幕中调用一个按钮时,指示该按钮导航回到第一屏幕。

To do this, can I get find the called Fragment (let's say viewPager.setCurrentItem(4) is called) and make the animation available only to that fragment? 为此,我能否找到被调用的片段(比如说viewPager.setCurrentItem(4)被调用)并使动画仅适用于该片段?

Or else even better, is there a way for me to individually define/change the animation? 还是更好,我可以单独定义/更改动画吗? Like in third Fragment when "Go to Fragment 2" button is pressed - display one animation, in first fragment when "Go to Fragment 10" is pressed, display one animation? 就像在按下“转到片段2”按钮时在第三个片段中显示一个动画一样,在按下“转到片段10”时在第一个片段中显示一个动画?

Anyway whatever the way I select, the ViewPager cannot be removed because I have already applied it largely in my app. 无论如何,无论选择ViewPager方式,都无法删除ViewPager因为我已经在应用程序中大量使用了它。

Hope it will help you 希望对您有帮助

   if (position == 1) {
                    viewPager.setPageTransformer(true, new DepthPageTransformer());
                } else {
                    viewPager.setPageTransformer(true, null);
                }

add this code into viewPager onPageChangeListener 将此代码添加到viewPager onPageChangeListener

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM