如何在视图寻呼机到达最后一张图像时自动更改图像,它应自动进入第一张图像

时间:2017-08-05 04:27:34

标签: android android-viewpager

我现在正在实现视图寻呼机,我希望在一个特定的时间段内自动逐个更改图像,可能是5毫秒一次。

我还必须手动允许用户滑动图像(它正常工作)

但是图像不会自动更改,当它到达最后一张图像时,它应该自动进入第一张图像

final Handler handler = new Handler();
        final Runnable Update = new Runnable() {
            public void run() {
                if (currentPage == strImages.length-1) {
                    currentPage = 0;
                }
                intro_images.setCurrentItem(currentPage++, true);
            }
        };

        timer = new Timer(); // This will create a new Thread
        timer .schedule(new TimerTask() { // task to be scheduled

            @Override
            public void run() {
                handler.post(Update);
            }
        }, 500, 3000);

我使用了上面的代码,但它无法正常工作

5 个答案:

答案 0 :(得分:3)

尝试将addOnPageChangeListener添加到viewPager这样的

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (position == strImages.length-1) {
                currentPage = 0;
            }
            intro_images.setCurrentItem(currentPage++, true);
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

或自动更改页面尝试创建一个像这样的时间任务

Timer timer;
timer = new Timer();
timer.scheduleAtFixedRate(new RemindTask(), 0, 3000); // delay*/

 private class RemindTask extends TimerTask {
int current = viewPager.getCurrentItem();

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

           if (current < strImages.size()) {
                    viewPager.setCurrentItem(current);
                    current += 1;
                } else {

                    current = 0;
                    viewPager.setCurrentItem(current);

                }
        }
    });

}
}

答案 1 :(得分:3)

以下代码是获取最后一个位置并滚动到第一个位置:

 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
 {
            @Override

      public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {
                if (position == Yourlist.size()-1) {
                  pager.setCurrentItem(0);
                }
                  pager.setCurrentItem(position++,true);


            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

下面的代码是使用CountDown计时器每10秒自动更改图片:

 - First you have to declare one array,which will contain your
   images,then after you have to use below code.

int i=0;


new CountDownTimer(1000,1000)
 {

                @Override
                public void onTick(long millisUntilFinished) {}

                @Override
                public void onFinish() {
                    iV.setImageDrawable(sdk.getContext().getResources().getDrawable(array[i]));
                    i++;
                    if(i== array.length-1) {i=0;}
                    start();
                }
            }.start();

答案 2 :(得分:1)

您不需要HandlerTimerTask的组合,您可以使用Handler这样的简单Handler.postDelayed

private Handler handler = new Handler();

final Runnable Update = new Runnable() {
    public void run() {
        int totalCount = intro_images.getAdapter().getCount();
        int currentItem = intro_images.getCurrentItem();
        if (currentItem == (totalCount - 1)) {
            currentItem = 0;
        } else {
            currentItem = currentItem + 1;
        }
        intro_images.setCurrentItem(currentItem, true);

        handler.postDelayed(this, 3000);
    }
};

@Override
protected void onResume() {
    super.onResume();

    handler.postDelayed(Update, 500);
}

@Override
protected void onPause() {
    super.onPause();

    if(handler != null) {
        handler.removeCallbacks(Update);
    }
}

答案 3 :(得分:0)

AnimationDrawable animation = new AnimationDrawable();

答案 4 :(得分:0)

只需将监听器添加到viewpager即可获得最后一个位置并滚动到第一个位置。

vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) {
                        if(position==yourlist.length){
                            vp.setCurrentItem(0);
                        }
                    }
                });