1

我的應用程序只有很少的片段。我正在使用ViewPager,我期望爲ViewPager交易提供不同的動畫。以下是我的代碼。Android:將「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個屏幕時一樣。否則,當在第三屏幕中調用按鈕時,該屏幕被指示回到第一屏幕。

要做到這一點,我可以找到被稱爲片段(假設調用viewPager.setCurrentItem(4)),並使動畫僅可用於該片段?

否則更好,有沒有辦法讓我單獨定義/更改動畫?當按下「轉到片段2」按鈕時,就像在第三片段中一樣 - 顯示一個動畫,在按下「轉到片段10」時的第一個片段中,顯示一個動畫?

無論如何,無論我選擇什麼方式,ViewPager都不能被刪除,因爲我已經在很大程度上將其應用於我的應用。

回答

0

希望它會幫助你

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

這段代碼添加到viewPager onPageChangeListener

+0

謝謝。但它似乎不太好。似乎我們回來的時候動畫卡在中間。 –