您的位置:首页 > 移动开发 > Android开发

欢迎引导页面的滑动进入

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

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))//避免重复进入

b8dd
//进入主界面
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));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息