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