欢迎引导页面的滑动进入

在用户首次进入或升级时在欢迎页面一般情况下都会加入一个引导的页面,当滑动到最后一个页面时点击或向右滑动时就能进入主页面,实现代码如下:

public class WelcomeActivity extends Activity {
    private final int[] imageIDs = new int[]{R.mipmap.guide_image_01, R.mipmap.guide_image_02,
            R.mipmap.guide_image_03};

    private volatile boolean isLastPage;//viewPager是否跑到最后一页
    @ViewInject(R.id.viewPager)//其实就是findViewByID
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        startGuidePage();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    /**
     * 开启引导页
     */
    private void startGuidePage() {
        List<ImageView> views = new ArrayList<>();
        ImageView imageView;
        for (int i = 0; i < imageIDs.length; i++) {
            imageView = new ImageView(this);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            imageView.setImageResource(imageIDs[i]);
            imageView.setLayoutParams(params);
            if (i == imageIDs.length - 1) {
                //点击进入
                imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        goMainActivity();
                    }
                });
            }
            views.add(imageView);
        }
        viewPager.setVisibility(View.VISIBLE);
        viewPager.setAdapter(new GuideAdapter(views));
        final EdgeEffectCompat edgeEffectCompat = getEdgeEffectCompat(viewPager);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            AtomicBoolean isGoMainActivity = new AtomicBoolean(false);

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

            @Override
            public void onPageSelected(int position) {
                isLastPage = position == imageIDs.length - 1;
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                boolean isIdleState = (state == ViewPager.SCROLL_STATE_IDLE);//viewPager是否处于闲置状态
                if (isLastPage && isIdleState &&//处于最后页 并处于闲置状态(也可认为是手指离开了屏幕)
                        edgeEffectCompat != null && !edgeEffectCompat.isFinished()//表示viewPager右边缘色已经展示
                        && isGoMainActivity.compareAndSet(false, true))//避免重复进入
                    //进入主界面
                    goMainActivity();
            }
        });
    }

    /**
     * viewPager右边缘色 对象
     */
    private EdgeEffectCompat getEdgeEffectCompat(ViewPager viewPager) {
        EdgeEffectCompat edgeEffectCompat = null;
        try {
            Field mRightEdge = viewPager.getClass().getDeclaredField("mRightEdge");
            mRightEdge.setAccessible(true);
            edgeEffectCompat = (EdgeEffectCompat) mRightEdge.get(viewPager);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return edgeEffectCompat;
    }

    /**
     * 进入主界面
     */
    private void goMainActivity() {
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }
}

因项目的原因,引导页图我就不上传了,另外我将GuideAdapter也复制下,代码一般情况我都不太爱注释的安静
public class GuideAdapter extends PagerAdapter {

    private List<ImageView> views;

    public GuideAdapter(List<ImageView> views){
        this.views=views;
    }

    @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) {
        container.addView(views.get(position));
        return views.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(views.get(position));
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值