簡體   English   中英

使用ViewPager Android進行屏幕幻燈片放映

[英]Slide show of screens using viewpager android

我正在開發一個Android應用程序,我想在其中創建屏幕幻燈片。我正在使用ViewPager在屏幕之間滑動,並使用Java Timer每5秒自動幻燈片一次。

問題是,我無法從一個屏幕緩慢平穩地過渡到另一個屏幕。 5秒完成后,它將立即移至下一個屏幕。我需要緩慢而平穩的過渡。可能嗎?請在下面查看我的計時器代碼並查看尋呼機代碼。

     public void slideshowtimer()
     {
      t.scheduleAtFixedRate(new TimerTask() 
       {

        @Override
        public void run() 
        {
            runOnUiThread(new Runnable() 
            {

                public void run() 
                {
                    Log.e("inside", "timer - "  + viewPagerCurrentItem);

                    myPager.setCurrentItem(viewPagerCurrentItem++);

                }

            });
        }

    }, 0, 5000);
}



              @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    t = new Timer();

    MyPagerAdapter adapter = new MyPagerAdapter();
    myPager = (ViewPager) findViewById(R.id.viewPager);
    myPager.setAdapter(adapter);

    slideshowtimer();

    //myPager.setCurrentItem(0);
}





private class MyPagerAdapter extends PagerAdapter {

    public int getCount() {
        return 3;
    }

    public Object instantiateItem(View collection, int position) {

        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        int resId = 0;
        switch (position) {
        case 0:                         

            //  resId = LayoutOne.newInstance(_context);    

            resId = R.layout.layout_one;
            break;
        case 1:
            resId = R.layout.layout_two;
            break;
        case 2:
            resId = R.layout.layout_third;
            break;

        }

        View view = inflater.inflate(resId, null);

        ((ViewPager) collection).addView(view, 0);

        return view;
    }

請幫忙。謝謝!

您是否嘗試過將Smooth Scroll設置為true? 這里看看方法。

您是否嘗試過將自己的滾動條添加到ViewPager。 您可以設置滾動動畫以使用滾動類中的持續時間顯示。 我這樣做是這樣的:

viewFlow=(ViewPager)findViewById(R.id.presentationViewPager);
try {
        Field mScroller;
        Interpolator sInterpolator = new DecelerateInterpolator();
        mScroller = ViewPager.class.getDeclaredField("mScroller");
        mScroller.setAccessible(true); 
        FixedSpeedScroller scroller = new FixedSpeedScroller(viewFlow.getContext(),   sInterpolator);
        // scroller.setFixedDuration(5000);
        mScroller.set(viewFlow, scroller);
    } catch (NoSuchFieldException e) {
    } catch (IllegalArgumentException e) {
    } catch (IllegalAccessException e) {
    }

這是我的Scroller代碼:

public class FixedSpeedScroller extends Scroller {

private int mDuration = 600;

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) {
    // Ignore received duration, use fixed one instead
    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);
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM