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

Posted

技术标签:

【中文标题】Android:将“ViewPager”动画从片段更改为片段【英文标题】:Android: Changing "ViewPager" animation from Fragment to Fragment 【发布时间】:2016-11-03 18:40:20 【问题描述】:

我有一个包含少量片段的应用程序。我正在使用ViewPager,我希望为ViewPager 交易提供不同的动画。下面是我的代码。

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);
        
    

但是,我不需要所有屏幕都使用相同的动画。但是在某些情况下我只想要这个自定义动画,比如当你从第 4 个屏幕返回到第 3 个屏幕时。否则,当在第 3 个屏幕中调用一个按钮时,该按钮被指示导航回第 1 个屏幕。

为此,我能否找到被调用的 Fragment(假设 viewPager.setCurrentItem(4) 被调用)并使动画仅适用于该 Fragment?

或者更好的是,有没有办法让我单独定义/更改动画?就像按下“转到片段 2”按钮时在第三个片段中一样 - 显示一个动画,当按下“转到片段 10”时在第一个片段中显示一个动画?

无论如何,无论我选择哪种方式,ViewPager 都无法删除,因为我已经在我的应用中大量应用了它。

【问题讨论】:

【参考方案1】:

希望对你有帮助

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

将此代码添加到 viewPager onPageChangeListener

【讨论】:

谢谢。但是,它似乎效果不佳。似乎当我们回来时动画卡在中间。

以上是关于Android:将“ViewPager”动画从片段更改为片段的主要内容,如果未能解决你的问题,请参考以下文章

ViewPager - 将数据从片段发送到活动时出现 Android 错误 setCurrentItem(int,boolean)

从ViewPager android替换片段

viewpager 中的 3 个 android 片段,如何让它们全部存活?

在ViewPager上,在onPageSelected上的片段上启动动画

在渲染之前触发ViewPager片段内嵌套片段的动画

android - 将数据从 Activity 传递到 ViewPager 中的 Fragment