Android ViewPager之小圆点动态滑动

效果图

Android ViewPager之小圆点动态滑动_第1张图片
GIF.gif

第一步、布局

主界面布局,ViewPager+6个小圆点

MainActivity.xml



    
    

        

        
        
        
        
        
    

这里的可以通过drawable设置颜色样式

激活样式



    
    
    

未激活样式



    
    
    

第二步、ViewPager滑动展示的界面

view




    

    
    


第三步、继承PagerAdapter重写必须用的4个用法

public class AdapterViewpager extends PagerAdapter {
    
    private List views;

    public AdapterViewpager(List mViewList) {
        this.views = mViewList;
    }

    @Override
    public int getCount() {//必须实现
        return views.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {//必须实现
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {//必须实现,实例化
       
        ViewGroup parent = (ViewGroup) views.get(position).getParent();
        if (parent != null)
            parent.removeAllViews();

        container.addView(views.get(position));
        return views.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {//必须实现,销毁
        container.removeView(views.get(position));
    }
}

补充:一些方法

Android ViewPager之小圆点动态滑动_第2张图片

其中,getCount和isViewFromObject是必须覆写的方法。isViewFromObject是用来判断pager的一个view是否和instantiateItem方法返回的object有关联,因为instantiateItem方法返回值不一定是view,可以是任意对象。
而当我们覆写instantiateItem方法时,如果直接写container.addView(views.get(position))的话会报
java.lang.IllegalStateException:
The specified child already has a parent. You must call removeView() ..."造成程序结束。
提示我们要添加的View已经绑定一个父类,由于一个子view不能与两个父类相关,所以必须得解绑。
因此必须在此之前添加判断,如果已经绑定了一个父类,必须先解绑再添加到ViewGroup里:

ViewGroup parent = (ViewGroup) views.get(position).getParent();  
if (parent != null)  
    parent.removeAllViews();  

第四步、初始化

MainActivity.java

//viewpager的设置
        vpager_one = (ViewPager) findViewById(R.id.viewpage);
        aList = new ArrayList();

        //设置第一个点未激活状态
        lltPageIndicator = (LinearLayout) findViewById(R.id.llt_page_indicator);
        lltPageIndicator.getChildAt(0).setEnabled(false);

        //循环添加viewpager
        for (int i = 0; i < 6; i++) {
            aList.add(getGuidePage(i));
        }

        //实现方法类
        mAdapter = new AdapterViewpager(aList);
        //添加
        vpager_one.setAdapter(mAdapter);

        //滑动监听
        vpager_one.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            //滚动过程中实现
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }
            //滚动成功后实现
            @Override
            public void onPageSelected(int position) {
                clearIndicatorFocusedState();
                lltPageIndicator.getChildAt(position).setEnabled(false);
            }
            //滚动成功前,即手指按下屏幕时
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

实现方法类

//滑动消除小圆圈
    private void clearIndicatorFocusedState() {
        // TODO 自动生成的方法存根  
        int childCount = lltPageIndicator.getChildCount();
        for (int i = 0; i < childCount; i++) {
            lltPageIndicator.getChildAt(i).setEnabled(true);

        }
    }

    private View getGuidePage(int i) {
        // TODO 自动生成的方法存根
        View v = View.inflate(this, R.layout.view_one, null);
        ImageView ivGuidePage = (ImageView) v.findViewById(R.id.iv);
        tv1 = v.findViewById(R.id.tv1);
        tv2 = v.findViewById(R.id.tv2);

        switch (i) {
            case 0:
                ivGuidePage.setImageResource(R.drawable.img_home_guide_chat);

                break;
            case 1:
                ivGuidePage.setImageResource(R.drawable.img_home_guide_add);
                tv1.setText("立即添加另一半");
                tv2.setText("开启你们的恩爱之旅");
                break;
            case 2:
                ivGuidePage.setImageResource(R.drawable.img_home_guide_alarm);
                tv1.setText("远程闹钟");
                tv2.setText("让 TA 一键叫你起床");
                break;
            case 3:
                ivGuidePage.setImageResource(R.drawable.img_home_guide_distance);
                tv1.setText("距离感应");
                tv2.setText("你我距离一键感应");
                break;
            case 4:
                ivGuidePage.setImageResource(R.drawable.img_home_guide_game);
                tv1.setText("情侣二人游戏");
                tv2.setText("一起养宠物,一起养宝宝");
                break;
            case 5:
                ivGuidePage.setImageResource(R.drawable.img_home_guide_notify);
                tv1.setText("智能提醒");
                tv2.setText("让你不在错过 TA 的生日");
                break;
        }

        return v;

    }

你可能感兴趣的:(Android ViewPager之小圆点动态滑动)