안내 페이지의 슬라이딩 진입을 환영합니다

사용자가 처음 들어가거나 업그레이드할 때 환영 페이지에 일반적으로 안내 페이지가 추가됩니다. 마지막 페이지로 미끄러질 때 클릭하거나 오른쪽으로 미끄러질 때 메인 페이지에 들어갈 수 있습니다. 코드는 다음과 같습니다.
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 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();
    }
}

프로젝트의 원인으로 인해 안내 페이지 그림을 업로드하지 않겠습니다. 그리고 가이드 어댑터도 복사했습니다. 코드의 일반적인 상황을 저는 주석을 별로 좋아하지 않습니다.
public class GuideAdapter extends PagerAdapter {

    private List views;

    public GuideAdapter(List 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));
    }
}

좋은 웹페이지 즐겨찾기