2015-04-20 39 views
5

To jest mój kod do robienia ViewPager. Chcę animować pomiędzy zmianami stron. więc piszę ten kod:Android -Jak animować viewPager

ViewPagerAdapter adapter; 
       adapter = new ViewPagerAdapter(FistActiivty.this,imges); 
       vp.setAdapter(adapter); 
       pageSwitcher(2); 

try { 
        Field mScroller; 
        mScroller = ViewPager.class.getDeclaredField("mScroller"); 
        mScroller.setAccessible(true); 
        Interpolator sInterpolator = new AccelerateInterpolator(); 
        FixedSpeedScroller scroller = new FixedSpeedScroller(vp.getContext(), sInterpolator); 
        // scroller.setFixedDuration(5000); 
        mScroller.set(vp, scroller); 
       } catch (Exception e) { 
        Log.v("this",e.getMessage()); 
       } 

public class FixedSpeedScroller extends Scroller { 

     private int mDuration = 2000; 

     public FixedSpeedScroller(Context context) { 
      super(context); 
     } 

     public FixedSpeedScroller(Context context, Interpolator interpolator) { 
      super(context, interpolator); 
     } 

     public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) { 
      super(context, interpolator, flywheel); 
     } 

     @Override 
     public void startScroll(int startX, int startY, int dx, int dy, int duration) { 
      super.startScroll(startX, startY, dx, dy, mDuration); 
     } 

     @Override 
     public void startScroll(int startX, int startY, int dx, int dy) { 
      // Ignore received duration, use fixed one instead 
      super.startScroll(startX, startY, dx, dy, mDuration); 
     } 
    } 

    public void pageSwitcher(int seconds) { 
     timer = new Timer(); // At this line a new Thread will be created 
     timer.scheduleAtFixedRate(new RemindTask(), 0, seconds * 1000); 

    } 
    class RemindTask extends TimerTask { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       public void run() { 
        Log.v("this","change pager " +page); 
        if (page > imges.length) { 
         vp.setCurrentItem(0); 
         page=1; 
        } else { 
         vp.setCurrentItem(page++); 
        } 
       } 
      }); 

     } 
    } 


    class ViewPagerAdapter extends PagerAdapter { 
     Context context; 
     String[] img; 
     LayoutInflater inflater; 
     ImageLoader imageLoader = ImageLoader.getInstance(); 
     DisplayImageOptions options; 
     private ImageLoadingListener imageListener; 

     public ViewPagerAdapter(Context context, String[] img) { 
      this.context = FistActiivty.this; 
      this.img = img; 
     } 

     @Override 
     public int getCount() { 
      return img.length; 
     } 


     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view == ((RelativeLayout) object); 
     } 

     @Override 
     public Object instantiateItem(ViewGroup container, int position) { 
      ImageView imgflag; 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View itemView = inflater.inflate(R.layout.viewpager_item, container,false); 
      imgflag = (ImageView) itemView.findViewById(R.id.flag); 
      imageLoader.displayImage(img[position], imgflag,options, imageListener); 
      ((ViewPager) container).addView(itemView); 

      return itemView; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      // Remove viewpager_item.xml from ViewPager 
      ((ViewPager) container).removeView((RelativeLayout) object); 

     } 

    } 

Wynik tego kodu jest następujący. Zmienia on viewpager co 2 sekundy i działa dobrze, ale nie animuje pomiędzy zmianą stron, ale gdy ręcznie zmieniam pager, animuje go.

Jak wymusić na nim animację, gdy chce się zmienić strony?

Dzięki.

+1

Spróbuj do tej biblioteki https://github.com/ToxicBakery/ViewPagerTransforms –

+0

sprawdź ten http://stackoverflow.com/questions/8155257/slowing-speed-of-viewpager-controller-in-android/9731345#9731345 –

Odpowiedz

0

Spróbuj użyć opcji smoothscroll, jeśli o to ci chodzi.
Przejdź do tego wewnątrz swojej TimerTask.

if (page > imges.length) { 
    vp.setCurrentItem(0, true); 
    page=1; 
} else { 
    vp.setCurrentItem(page++, true); 
} 
+0

dzięki nie działa –

0

myślę, że należy użyć PageTransformer zastosowanie animacji na zmianę widoku ..

proszę odwiedzić this link ...