android使用ViewPager实现欢迎引导页
jopen
9年前
android使用ViewPager实现欢迎引导页
大多数APP第一次启动的时候,都会有一个引导界面,左右滑动,到最后一张,用户点击才再次进入主界面。当第二次启动的时候,则直接进入主界面。 这种效果一般使用ViewPager实现。今天就来为大家介绍一下ViewPager的使用。
实现步骤:
使用SharedPerferences来记录是否是第一次启动APP,如果是,则转跳到Guide页面,如果不是第一次启动。就转跳到主Activity.
MainActivity:
本Activity作为Logo页面进入,使用handler来实现页面的延迟专跳。对于handler还不太了解的同学,可以来这里学习一下安卓的异步消息传递机制:http://blog.csdn.net/guolin_blog/article/details/9991569 (感谢郭神带来好文章)
private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case MAIN: Intent intent = new Intent(MainActivity.this,Main.class); startActivity(intent); finish(); break; case GUIDE: Intent intent2 = new Intent(MainActivity.this,GuideView.class); startActivity(intent2); finish(); break; } } };
此外使用SharedPreferences来读取用户启动信息
mSharedPreferences = getSharedPreferences("conf",MODE_PRIVATE); isFirst = mSharedPreferences.getBoolean("first",true);
之后进行简单的判断,这里不在累赘。
GuideActivity
这个界面是引导页的界面,我们首先在其布局文件下添加一个ViewPager之后在java文件中获取到这个ViewPager,并为这个ViewPager添加一个适配器。 这个适配器需要自己继承PagerAdapter来重写,稍后会进行讲解。
mViewPager = (ViewPager) findViewById(R.id.viewpager); ViewPagerAdapter adapter = new ViewPagerAdapter(mList); mViewPager.setAdapter(adapter);
注意这个Adapter的传入参数是一个泛型为View的List。我们先向List里添加我们的View,再为最后一个view的Button添加监听事件,用来转跳到主页面;
mList = new ArrayList<>(); View view = LayoutInflater.from(this).inflate(R.layout.layout1,null); mList.add(view); view = LayoutInflater.from(this).inflate(R.layout.layout2,null); mList.add(view); view = LayoutInflater.from(this).inflate(R.layout.layout3,null); mList.add(view); mButton = (Button) view.findViewById(R.id.button_enter); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(GuideView.this,Main.class); startActivity(intent); finish(); } });
ViewPagerAdapter
这是ViewPager的适配器,继承于PagerAdapter,主要实现两个方法:
destroyItem();
instantiateItem();
顾名思义一个是view去掉时候的方法,一个是添加view的方法。
这里可以看到一个很熟悉的参数 container,没错,和baseAdapter的参数很像,都是用来缓存当前view的。接下来只需要调用他的removeView和addView即可。需要注意的是,需要向下转型为ViewPager。
public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager)container).removeView(mList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { Log.i("wing","viewAdatper here"); ((ViewPager)container).addView(mList.get(position)); return mList.get(position); }
另外不要忘记重写他的构造方法。传入一个泛型为view的List
public ViewPagerAdapter(ArrayList list){ mList = list; }
这样适配器就完成了,大家自己多写几遍就会熟练。对了,别忘了给每个view一个布局文件。
下面看看效果图: