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

Android控件使用—Viewpager做引导界面

2015-06-12 17:04 447 查看
一个APP,首次打开的时候,第一个看到的是一张欢迎图片,然后进入引导界面,引导界面完了之后才进入主界面。要完成这个功能,首先,把welcome.java设置为启动的activity,welcome加载的xml只是一张图片,并没有什么特别,然后在java中添加代码。

首先定义四个量

private boolean isFirstIn = false;
private static final int TIME = 5000;
private static final int Enter_HOME = 1000;
private static final int Enter_GUIDE = 1001;


第一个是判断的,第二个是时间;

然后创建一个线程,让它进行判断,是执行enterHome()函数还是执行enterGuide()函数,这两个函数只是简单的activity跳转函数,即让它根据判断跳转到不同的activity。

private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case Enter_HOME:
enterHome();
break;
case Enter_GUIDE:
enterGuide();
break;
default:
break;
}
};
};


然后就是 对它进行判断的函数,editor的作用是让这个引导界面这启动一次,将里面的false改成true就是每次都启动引导界面,记得把init()写到oncreat里面,这样才会有效果。

private void init(){
perPreferences =getSharedPreferences("Hebin", MODE_PRIVATE);
isFirstIn=perPreferences.getBoolean("isFirstIn", true);
if (!isFirstIn) {
mHandler.sendEmptyMessageDelayed(Enter_HOME, TIME);
}
else {
mHandler.sendEmptyMessageDelayed(Enter_GUIDE, TIME);
Editor editor=perPreferences.edit();
editor.putBoolean("isFirstIn", false);
editor.commit();
}
}


默认是加载欢迎的图片5秒之后进入引导界面或主界面,如果不想等待5秒,则需要在图片那里添加一个按钮,并给它增加一个点击事件,点击事件的代码如下:


main_load_rl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isFirstIn) {
enterHome();
mHandler.removeMessages(Enter_HOME);
}
else {
enterGuide();
Editor editor=perPreferences.edit();
editor.putBoolean("isFirstIn", false);
editor.commit();
mHandler.removeMessages(Enter_GUIDE);
}
}
});


根据isFirstin判断,进行跳转activity,记得执行完动作之后要移除线程,不然会启动两次。

之后就是用Viewpager切换图片的activity,先写一个viewpagerAdapter类,继承pageradapter类,代码如下:

private List<View>views;
public ViewPagerAdapter(List<View>views,Context context) {
this.views=views;
}
public void destroyItem(View container, int position, Object object) {

((ViewPager) container).removeView(views.get(position));
};
@Override
public Object instantiateItem(View container, int position) {
((ViewPager) container).addView(views.get(position));
return views.get(position);
}
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return (arg0==arg1);
}


在activity设置viewpager的内容,首先,将xml实例化为view并添加到arraylist里面,

LayoutInflater inflater=LayoutInflater.from(this);
views=new ArrayList<View>();
views.add(inflater.inflate(R.layout.guide01, null));
views.add(inflater.inflate(R.layout.guide02, null));
views.add(inflater.inflate(R.layout.guide03, null));
views.add(inflater.inflate(R.layout.guide04, null));
vpAdapter=new ViewPagerAdapter(views, this);
vp=(ViewPager) findViewById(R.id.guide_viewpager);
vp.setAdapter(vpAdapter);
}  vp.setOnPageChangeListener(this);


并且设置切换页的监听事件。

然后根据views找到相对应的imageView,并显示出来,然后给viewpager设置adapter

private void initDots(){
dots=new ImageView[views.size()];
for (int i = 0; i < views.size(); i++) {
dots[i]=(ImageView)findViewById(ids[i]);
}
}


其中

private ImageView[] dots;
private int[] ids={R.id.iv1, R.id.iv2, R.id.iv3,R.id.iv4 };


然后设置viewpager底部小圆点的切换,根据图片进行判断,分别加载两张图片。

public void onPageSelected(int arg0) {
for (int i = 0; i < ids.length; i++) {
if (arg0==i) {
dots[i].setImageResource(R.drawable.login_point_selected);
} else {
dots[i].setImageResource(R.drawable.login_point);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: