【问题标题】:Timer for Image carousel Android图像轮播Android计时器
【发布时间】:2020-10-28 21:13:32
【问题描述】:

我为我的应用创建了一个图像轮播。实际上,为了尝试,它包括 5 个横幅。

我会插入计时器来自动切换横幅,但我没有找到正确的方法。

这是我的 MainActivity 文件和幻灯片代码:

viewPager = findViewById(R.id.viewPagerId);
    mList = new ArrayList<>();
    mList.add(new ModalClass(R.drawable.banner_eeee , "Title"));
    mList.add(new ModalClass(R.drawable.banner_gggg , "Title"));
    mList.add(new ModalClass(R.drawable.banner_ffff , "Title"));
    mList.add(new ModalClass(R.drawable.banner_gggg , "Title"));
    mList.add(new ModalClass(R.drawable.banner_eeee , "Title"));

    SlideHomepageAdapter slideHomepageAdapter = new SlideHomepageAdapter(this, mList);
    viewPager.setAdapter(slideHomepageAdapter);

你能帮帮我吗?

感谢您的回答。

【问题讨论】:

    标签: android image carousel slide


    【解决方案1】:

    您可以为此使用ScheduledExecutorService

    ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
    executor.scheduleAtFixedRate(updateToNextImage, 0, 3000, TimeUnit.MILLISECONDS);
    

    updateToNextImage Runnable 应该处理图像的切换。像这样的:

    Runnable updateToNextImage = new Runnable() {
        @Override
        public void run() {
            runOnUiThread(
                new Runnable() {
                    @Override
                    public void run() {
                        // Modify ui on the main thread
                        viewPager.setCurrentItem(currentImageIndex++ % imageCount, true);
                    }
                }
            );
        }
    };
    

    完成后不要忘记关闭它:

    executor.shutdown();
    

    【讨论】:

    【解决方案2】:

    好的,那么代码应该是:

        viewPager = findViewById(R.id.viewPagerId);
        mList = new ArrayList<>();
        mList.add(new ModalClass(R.drawable.banner_eeee , "Title"));
        mList.add(new ModalClass(R.drawable.banner_gggg , "Title"));
        mList.add(new ModalClass(R.drawable.banner_ffff , "Title"));
        mList.add(new ModalClass(R.drawable.banner_gggg , "Title"));
        mList.add(new ModalClass(R.drawable.banner_eeee , "Title"));
    
        SlideHomepageAdapter slideHomepageAdapter = new SlideHomepageAdapter(this, mList);
        viewPager.setAdapter(slideHomepageAdapter);
    
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
        executor.scheduleAtFixedRate(updateToNextImage, 0, 3000, TimeUnit.MILLISECONDS);
    
        Runnable updateToNextImage = new Runnable() {
        @Override
        public void run() {
            runOnUiThread(
                new Runnable() {
                    @Override
                    public void run() {
                        // Modify ui on the main thread
                        viewPager.setCurrentItem(currentImageIndex++ % imageCount, true);
                    }
                }
            );
        }
    };
    
    executor.shutdown();
    

    抱歉,我是新手。

    【讨论】:

    • 不,您在生命周期方法中启动/停止它。在“Activity”或“Fragment”中创建“ScheduledExecutorService”作为成员变量。在“onStart()”中运行任务(“scheduleAtFixedRate()”返回一个“Future”,您也希望将其存储为成员变量)。在 'onStop()' 中再次停止任务并在 'onDestroy()' 中调用 'shutdown()'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2017-11-27
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2021-10-12
    • 2017-03-02
    相关资源
    最近更新 更多