zoukankan      html  css  js  c++  java
  • 【幻化万千戏红尘】qianfeng-Android-Day17_ViewPager

    ViewPager

    一、ViewPager简介:

    (一)、作用:

    ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。ViewPager用于实现多页面的切换效果。该类存在于Google的兼容包里面,android.support.v4.view.ViewPager

    (二)、ViewPager的常规使用步骤

    1、在布局文件中定义ViewPager组件(android.support.v4.view.ViewPager节点);

    2、在Activity中设置ViewPager中放置的view内容;

    3、给ViewPager对象设置适配器(PagerAdapter)。

    1. ViewPager的适配器是PagerAdapter,它是基类。提供适配器来填充ViewPager的内部。一般做法都是继承PagerAdapter,自定义一个MyAdapter
    2. 也可以使用一个更具体的实现,FragmentPagerAdapterFragmentStatePagerAdapter。谷歌官方推荐ViewPagerFragment一起使用。当然在3.0以下版本中,没有必要这么做。

    (三)、实现PagerAdapter必须重写的方法:

    1getCount()

    2isViewFromObject(View, Object)

    3instantiateItem(ViewGroup, int)

    4destroyItem(ViewGroup, int, Object)

    【备注:】最少要实现上面四个方法,当然如果想让程序更健壮或是功能更全面,你可以重写其他的方法。

    ViewPager实现广告条实例

    (一Adapter核心代码

    public class MyAdapter extends PagerAdapter {

        private static final String TAG = "viewpager";

        private List<ImageView> list;

        public MyAdapter(List<ImageView> list) {

            this.list = list;

        }

        //返回ViewPager中item的总量

        @Override

        public int getCount() {

            //设置item的数量为Integer.MAX_VALUE

            return Integer.MAX_VALUE;

        }

        //判断当前显示的ImageView和instantiateItem方法返回的ImageView是否是同一个

        @Override

        public boolean isViewFromObject(View view, Object object) {

            return view == object;

        }

        //添加ImageView到ViewPager中

        @Override

        public Object instantiateItem(ViewGroup container, int position) {

            //根据position将List中的ImageView添加到ViewPager中

            container.addView(list.get(position%list.size()));

            Log.d(TAG, "instantiateItem() returned: " + position);

            //将添加的ImageView返回

            return list.get(position%list.size());

        }

        @Override

        public void destroyItem(ViewGroup container, int position, Object object) {

            //从容器中移除一个ImageView

            container.removeView(list.get(position%list.size()));

            Log.d(TAG, "destroyItem() returned: " + position);

        }

    }

    (二MainActivity核心代码:

    public class MainActivity extends AppCompatActivity {

        private List<ImageView> list;

        private LinearLayout dotLayout;

        private int prePosition;

        private ViewPager viewPager;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            initData();

            initView();

            //开启一个新线程,实现ViewPager的自动滚动

            new Thread(new Runnable() {

                @Override

                public void run() {

                    while (true) {

                        try {

                            Thread.sleep(3000);

                        } catch (InterruptedException e) {

                            e.printStackTrace();

                        }

                        //runOnUiThread中的代码运行在主线程中

                        runOnUiThread(new Runnable() {

                            @Override

                            public void run() {

                                viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);

                            }

                        });

                    }

                }

            }).start();

        }

        private void initView() {

            viewPager = (ViewPager) findViewById(R.id.vp1);

            //构造适配器

            MyAdapter adapter = new MyAdapter(list);

            //设置Adapter

            viewPager.setAdapter(adapter);

            //设置ViewPager预加载的页数

    //        viewPager.setOffscreenPageLimit(2);

            viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

                //ViewPager滑动过程中调用

                @Override

                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                //ViewPager新页面确定后调用

                @Override

                public void onPageSelected(int position) {

                    //设置前一个View为白色

                    dotLayout.getChildAt(prePosition).setEnabled(false);

                    //设置当前View为红色

                    dotLayout.getChildAt(position % list.size()).setEnabled(true);

                    //将当前位置赋给prePosition

                    prePosition = position % list.size();

                }

                //ViewPager滑动状态改变后调用

                //0--静止状态

                //1--手在拖动

                //2--手松开后自动滑动

                @Override

                public void onPageScrollStateChanged(int state) {

                }

            });

            //设置ViewPager的初始item

            viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - 3);

        }

        /**

         * 构造数据源

         */

        private void initData() {

            dotLayout = (LinearLayout) findViewById(R.id.dotLayout);

            list = new ArrayList<>();

            int[] imgs = new int[]{R.drawable.p001, R.drawable.p002, R.drawable.p003, R.drawable.p004, R.drawable.p005};

            for (int img : imgs) {

                //使用Java代码创建一个ImageView

                ImageView imageView = new ImageView(this);

                //设置图片以及ScaleType属性

                imageView.setImageResource(img);

                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

                list.add(imageView);

                //创建一个View对象

                View view = new View(this);

                //设置View的宽和高

                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()), (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()));

                //设置View左边距,避免View连在一起

                params.leftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12, getResources().getDisplayMetrics());

                view.setLayoutParams(params);

                //设置背景颜色,背景使用selector,可使View在不同状态显示不同颜色

                view.setBackgroundResource(R.drawable.dot_backg);

                //默认状态下View的Enable属性为false(View全为白色)

                view.setEnabled(false);

                //将View添加进LinearLayout中

                dotLayout.addView(view);

            }

            //第一个View默认为红色

            dotLayout.getChildAt(0).setEnabled(true);

        }

    }

    ViewPager加载Fragment实例:

    (一Adapter核心代码:

    public class MyFgAdapter extends FragmentPagerAdapter {

        private List<Fragment> list;

        public MyFgAdapter(FragmentManager fm, List<Fragment> list) {

            super(fm);

            this.list = list;

        }

        //返回一个Fragment

        @Override

        public Fragment getItem(int position) {

            return list.get(position);

        }

        //返回Fragment总数

        @Override

        public int getCount() {

            return list.size();

        }

    }

    (二Activity核心代码

    public class MainActivity extends AppCompatActivity {

        private List<Fragment> list;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            getSharedPreferences("loginInfo", MODE_PRIVATE).edit().putBoolean("isFirstLogin", false).commit();

            ViewPager viewPager = (ViewPager) findViewById(R.id.vp);

            initData();

            MyFgAdapter adapter = new MyFgAdapter(getSupportFragmentManager(), list);

            viewPager.setAdapter(adapter);

        }

        private void initData() {

            list = new ArrayList<>();

            ChatFragment chatFragment = new ChatFragment();

            FriendFragment friendFragment = new FriendFragment();

            FindFragment findFragment = new FindFragment();

            HomeFragment homeFragment = new HomeFragment();

            list.add(chatFragment);

            list.add(friendFragment);

            list.add(findFragment);

            list.add(homeFragment);

        }

    }

  • 相关阅读:
    JS & JQuery 动态处理select option
    如何在Oracle中复制表结构和表数据
    基于cxf的app文件上传接口(带回显功能)
    Jenkins的详细安装及使用--windows
    git用代码库文件完全覆盖本地/git不能提交jar的设置
    Windows平台下Git服务器搭建
    Vue脚手架之Vue-cli
    Vue的生命周期
    Vue状态管理之Vuex
    Vue路由管理之Vue-router
  • 原文地址:https://www.cnblogs.com/weigongcheng/p/5886445.html
Copyright © 2011-2022 走看看