• ViewPager 无线循环并自动滚动


    Activity:

    private void initView(View view){
    
        initData();
    
        homeViewPagerAdapter = new HomeViewPagerAdapter(list);
        viewPager.setAdapter(homeViewPagerAdapter);
        startAutoPlay();
    }
    
    private void initData() {
        list = new ArrayList<>();
        ImageView view1 = new ImageView(getActivity());
        view1.setImageDrawable(getResources().getDrawable(R.mipmap.view_page));
        ImageView view2 = new ImageView(getActivity());
        view2.setImageDrawable(getResources().getDrawable(R.mipmap.home2));
        view2.setScaleType(ImageView.ScaleType.CENTER_CROP);
        ImageView view3 = new ImageView(getActivity());
        view3.setImageDrawable(getResources().getDrawable(R.mipmap.home1));
        view3.setScaleType(ImageView.ScaleType.CENTER_CROP);
        list.add(view1);
        list.add(view2);
        list.add(view3);
    }
    
    /**
     *   开启自动滚动的方法
     */
    private void startAutoPlay() {
        isAutoPlay = true;
        handler.removeCallbacks(task);
        handler.postDelayed(task, delayTime);
    }
    
    /**
     * 暂停自动滚动
     */
    public void pauseAutoPlay() {
        isAutoPlay = false;
        handler.removeCallbacks(task);
    }
    /**
     * 自动滚动核心代码
     */
    private final Runnable task = new Runnable() {
        @Override
        public void run() {
            if (isAutoPlay) {
                // 自动滚动逻辑处理
                currentItem = viewPager.getCurrentItem();
                currentItem++;
                if(currentItem == homeViewPagerAdapter.getCount()) {
                    currentItem = 0;
                    viewPager.setCurrentItem(currentItem);
                    handler.postDelayed(this, delayTime);
                } else {
                    viewPager.setCurrentItem(currentItem);
                    handler.postDelayed(this, delayTime);
                }
            } else {
                handler.postDelayed(this, delayTime);
            }
        }
    };
    
    private Runnable runable = new Runnable() {
        @Override
        public void run() {
            //true表示平滑滚动
            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
        }
    };
    public void startScroll() {
        timerTask = new TimerTask() {
            @Override
            public void run() {
                hander.post(runable);
            }
        };
        timer.schedule(timerTask, DISPLAY_TIME, DISPLAY_TIME);
    }
    public void stopScroll() {
        timerTask.cancel();
        timerTask = null;
    }
    

      

      

    HomeViewPagerAdapter:

    public class HomeViewPagerAdapter extends PagerAdapter {
    
        private List<ImageView> list;
    
        public HomeViewPagerAdapter(List<ImageView> list) {
            this.list = list;
        }
    
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(list.get(position));
        }
    
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(list.get(position));
            return list.get(position);
        }
    }
    

      

    主要逻辑就是使用Handler的postDelay()方法,不断得到viewpager的当前页,然后+1,再用viewpager的setCurrent()方法设置当前+1后的界面。

  • 相关阅读:
    [转+]C语言复杂声明
    c和c++数组初始化一点小区别
    [转]Linux ftp命令的使用方法
    Ubuntu 12.04 英文版中文输入法设置
    [转]Android手机中获取手机号码和运营商信息
    把google地圖放在Crm Entity中
    为什么报表里面记录的创建时间 比我们电脑客户端的世界时间 隔8个小时?这个是什么原因?
    print style Iframe
    取出MSCRM父窗口的欄位的值
    Display Fetch in IFRAME – Part 2
  • 原文地址:https://www.cnblogs.com/IT-lss/p/9565605.html
Copyright © 2020-2023  润新知