【问题标题】:how to change the image automatically in view pager when it reaches the last image it should come to the first image automatically如何在视图寻呼机中自动更改图像,当它到达最后一张图像时,它应该自动到达第一张图像
【发布时间】:2018-08-01 17:18:49
【问题描述】:

我现在正在实现视图寻呼机,我想在特定的时间段内不断地自动更改图像,可能是每 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);

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

【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    试试这个添加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);
    
                    }
            }
        });
    
    }
    }
    

    【讨论】:

    • 我已经尝试了所有这些但它不符合我的要求我可以期待一些新的答案我已经看到这个答案并尝试过但没有用它不会改变
    • 非常感谢它完全解决了我的问题@Nilesh Rathod
    【解决方案2】:

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

     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) {
    
                }
            });
    

    下面的代码是使用倒数计时器每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();
    

    【讨论】:

    • 这是一个好主意,过程完美但图像没有改变,但是感谢@komal akhani的帮助和良好的方法
    • 非常感谢:)
    【解决方案3】:

    你不需要HandlerTimerTask的组合,你可以像这样使用简单的HandlerHandler.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);
        }
    }
    

    【讨论】:

    • 这是我尝试过的好主意,图像没有改变,但感谢@Muthukrishnan Rajendran
    【解决方案4】:

    只需将侦听器添加到您的 viewpager 即可获取最后一个位置并滚动到第一个位置。

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

    【讨论】:

    • 当我正确滑动它时,但我需要自动完成,例如我有 10 个图像,当它到达第 10 个图像时,所有 10 个图像应该在 5 毫秒内自动更改一次,然后它应该来到第一个并开始做同样的事情这正是我需要的
    【解决方案5】:
    AnimationDrawable animation = new AnimationDrawable();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多