«

Android基础—Viewpager做引导界面

时间:2024-3-2 18:33     作者:韩俊     分类: Android


一个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);
            }
            }
        }

标签: android

热门推荐