【幻化万千戏红尘】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);

    }

}

原文地址:https://www.cnblogs.com/weigongcheng/p/5886445.html