2016-12-31 44 views
1

我想在viewPagerViewPager的每個頁面有不同的動畫)中以非常簡單的動畫形式顯示一些圖像。 我ViewPager代碼:如何在Android的viewPager的每個頁面顯示/啓動動畫?

public class Sport2Activity extends AppCompatActivity { 
private SectionsPagerAdapter mSectionsPagerAdapter; 
private ViewPager mViewPager; 

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

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 


    // tab layout for circle of view pager 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabDots); 
    tabLayout.setupWithViewPager(mViewPager); 

} 

//********Adapter class********************************************************* 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 
    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return new EyeSportFragment(); 
       //return FragmentWithOneImage.newInstance("Fragment 1", R.drawable.android_1); 
      case 1: 
       return new FingerSportFragment(); 
      case 2: 
       return new NeckSportFinger(); 
      case 3: 
       return new WristSportFragment(); 
      case 4: 
       return new ShoulderSportFragment(); 
      case 5: 
       return new BackSportFragment(); 
      case 6: 
       return new WaterFragment(); 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { // Show 3 total pages. 
     return 7; 
    } 

和動畫類:

public class BackSportFragment extends Fragment { 
    private ImageView sportShowing_img; 

    public BackSportFragment() { 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_sport_show, container, false); 
     sportShowing_img= (ImageView) view.findViewById(R.id.sport_img); 



     AnimationDrawable animation = new AnimationDrawable(); 
     animation.addFrame(getResources().getDrawable(R.drawable.ic_action_hardware_keyboard_arrow_left), 1000); //1 Sec 
     animation.addFrame(getResources().getDrawable(R.drawable.ic_action_action_home), 1000); //1 Sec 
     animation.addFrame(getResources().getDrawable(R.drawable.cast_ic_notification_1), 1000); //1 Sec 
     animation.addFrame(getResources().getDrawable(R.drawable.common_google_signin_btn_icon_light), 1000); //1 Sec 
     animation.setOneShot(true); 

     sportShowing_img.setBackgroundDrawable(animation); 
     animation.start(); 

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       sportShowing_img.setVisibility(View.INVISIBLE); 
      } 
     }, 10000); 
     return view; 
    } 

} 

我該怎麼辦ViewPager與點擊/滾動每一頁,其動畫開始呢?

回答

1

實施OnPageChangeListener [回調接口,用於應對不斷變化的所選擇的頁面的狀態]您Activity

接口定義onPageSelected()方法如下圖所示:

@Override 
public abstract void onPageSelected (int position){ 
    Toast.makeText(getActivity(),"In the page " + position, 
      Toast.LENGTH_SHORT).show(); 
// depends on the position display your relevant animation 
} 

而且不要忘記調用

viewPager.setOnPageChangeListener(this); 
+0

我創建了'public static boolean anim_started = false;''在片段類。我應該在哪裏放「if」方法並檢查它的值? –

+0

沒有得到你真正的問題。每個片段中的每個動畫都是正確的。如果是anims會加載碎片內,那麼你將不會有一個箴言..是你做什麼或別的..如果你想用布爾,並避免加載下一個,直到動物結束,但它不是用戶友好 –

+0

我覺得我的答案! 'animation.setOneShot(true);'必須刪除。 –