引导页
2015-09-09 11:31
211 查看
这是参考网上别人的代码做的一个引导页,大致过程如下
1,应用启动时进入启动页,判断SharedPreferences中是否存有标记字段,若没有进入第2步并存入标记(可设置短暂延迟),若有则进入第3步;
2,启动引导页,展示引导内容,点击最后一页上的进入应用按钮进入第3步;
3,进入应用主界面;
启动页:
引导页:
引导页的内容适配器:
demo地址http://download.csdn.net/detail/duduhali/9091489
1,应用启动时进入启动页,判断SharedPreferences中是否存有标记字段,若没有进入第2步并存入标记(可设置短暂延迟),若有则进入第3步;
2,启动引导页,展示引导内容,点击最后一页上的进入应用按钮进入第3步;
3,进入应用主界面;
启动页:
public class WelcomeActivity extends Activity { private boolean isFirstIn = false; private static final int TIME = 1000;//在启动页停留的时间(毫秒) private static final int GO_HOME = 1000; private static final int GO_GUIDE = 1001; //用Handler实现延迟的效果 private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case GO_HOME: goHome();//进入主界面 break; case GO_GUIDE: goGuide();//进入引导页 break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); init(); } /**通过查询存储的标记判断是进入主页或引导页*/ private void init(){ SharedPreferences perPreferences = getSharedPreferences("dudu", MODE_PRIVATE); isFirstIn = perPreferences.getBoolean("isFirstIn", true);//第一次取到默认值true if (!isFirstIn) { handler.sendEmptyMessageDelayed(GO_HOME, TIME);//延迟TIME秒发送 }else{ //存入标记,只初次进入时执行一次 //一旦进入引导页,无论是否滑动到最后一页,下次都不再进入 handler.sendEmptyMessageDelayed(GO_GUIDE, TIME);//延迟TIME秒发送 Editor editor = perPreferences.edit(); editor.putBoolean("isFirstIn", false); editor.commit(); } } /**进入主界面*/ private void goHome(){ Intent i = new Intent(this,MainActivity.class); startActivity(i); finish(); } /**进入引导页*/ private void goGuide(){ Intent i = new Intent(this,Guide.class); startActivity(i); finish(); } }
引导页:
public class Guide extends Activity implements OnPageChangeListener { private ViewPager viewPager; private ViewPagerAdapter viewPagerAdapter; private List<View> views; private ImageView[] dots;//引导页上的n个圆点 private int[] ids = { R.id.iv1, R.id.iv2, R.id.iv3 };//引导页上作为n个圆点的ImageView的id private Button btn_start;//引导页最后一页的进入应用按钮 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); initViews(); initDots(); } /**初始化引导页的ViewPager*/ private void initViews() { LayoutInflater inflater = LayoutInflater.from(this); views = new ArrayList<View>(); views.add(inflater.inflate(R.layout.one, null)); views.add(inflater.inflate(R.layout.two, null)); views.add(inflater.inflate(R.layout.three, null)); viewPagerAdapter = new ViewPagerAdapter(views); viewPager = (ViewPager) findViewById(R.id.viewpager); viewPager.setAdapter(viewPagerAdapter); viewPager.setOnPageChangeListener(this); //引导页最后一页的进入应用按钮 btn_start = (Button) views.get(2).findViewById(R.id.btn_start); btn_start.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent i = new Intent(Guide.this, MainActivity.class); startActivity(i); finish(); } }); } /**初始引导页上的化圆点*/ private void initDots() { dots = new ImageView[views.size()]; for (int i = 0; i < views.size(); i++) { dots[i] = (ImageView) findViewById(ids[i]); } } @Override //此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。arg0 ==1的时辰默示正在滑动, //arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。 public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override //当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。 //其中三个参数的含义分别为:arg0 :当前页面,arg1:当前页面偏移的百分比,arg2:当前页面偏移的像素位置 public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override // 此方法是页面跳转完后得到调用,arg0是你当前页面的Position 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); } } } }
引导页的内容适配器:
public class ViewPagerAdapter extends PagerAdapter { private List<View> views; public ViewPagerAdapter(List<View> views) { this.views = views; } // 实现一个PageAdapter的时候,至少必须要重载(override)下面4个方法: @Override // 在指定的位置创建页面;适配器负责添加view到这个容器中,然而它只保证在finishUpdate(ViewGroup)返回时才完成。 public void destroyItem(View container, int position, Object object) {// 销毁条目 ((ViewPager) container).removeView(views.get(position)); } @Override // 删除指定位置的页面;适配器负责从view容器中删除view,然而它只保证在finishUpdate(ViewGroup)返回时才完成。 public Object instantiateItem(View container, int position) {// 实例化条目 ((ViewPager) container).addView(views.get(position)); return views.get(position); } @Override // 返回可用的view的数量。 public int getCount() {// 获取条目数量 return views.size(); } @Override // 判断页面是否跟指定的key对象关联,key对象由instantiateItem(ViewGroup, int)返回。 public boolean isViewFromObject(View arg0, Object arg1) { return (arg0 == arg1); } /* * PagerAdapter支持数据集(data set)的变更更新。 * 但数据集变更,必须发生在主线程中,并且最后要调用notifyDataSetChanged()方法, * 这点与从BaseAdapter派生的AdapterView的适配器,很相似。 数据集的改变,可以包含pages的添加,删除或位置改变。 * ViewPager将保持当前的页面处于active状态,它由实现了getItemPosition(Object)方法的适配器提供。 * * * ViewPager都关联一个key对象,而不是直接与Views关联。 这个key用来跟踪并唯一标识指定的页面,它独立于其在适配器中的位置。 * 对PagerAdapter的startUpdate(ViewGroup)方法的一次调用,标志着ViewPager的页面内容即将改变。 * 随后,会调用若干次instantiateItem(ViewGroup, int) 或destroyItem(ViewGroup, int, * Object), 最后,会调用 finishUpdate(ViewGroup),这意味着本次更新将要结束了。 * 等到finishUpdate返回时,与instantiateItem返回的key对象关联的view,应该被添加到其父控件ViewGroup中了, * 而与传递给destroyItem 的这些key关联的view,应该被移除了。 isViewFromObject(View, * Object)方法用于判断某个view是否与key对象关联。 一个简单的PagerAdapter,可以用page Views本身当为key对象; * 创建并添加到ViewGroup中后,可以instantiateItem(ViewGroup, int)中返回它; * 对应的destroyItem(ViewGroup, int, Object)的实现,从父控件ViewGroup中删除它; * isViewFromObject(View, Object) 可以这样实现:return view == object;. */ }主页(此处为空白页):
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
demo地址http://download.csdn.net/detail/duduhali/9091489
相关文章推荐
- 互联网文摘
- 算法导论—红黑树
- 前端工程师技能之photoshop巧用(从效果图到雪碧图)4——优化篇
- DataSource , DataSink, DataSourceLoop
- Intent学习笔记
- gcc 编译多个源文件
- mysql 浅析
- 安卓面试宝典
- iPhone 6s弃用蓝宝石屏 跟风厂商要哭了
- ios- 音乐播放器(1)
- 互联网产品设计常用文档类型-BRD、MRD、PRD、FSD
- Uva 307 Sticks(IDA*)
- Matlab 生成mexwin64文件时遇到的问题
- linux 常用命令详解
- mysql存储过程出参入参,sqlserver很熟悉的一件事到mysql,捣鼓了大半天。记录一下提醒自己。勿看
- apache和tomcat有什么不同,为什么要整合apache 和tomcat?
- 获取手机所有图片
- javascript json对象与json格式字符串区别
- Linux进程理解与实践(二)僵尸&孤儿进程 和文件共享
- Hello,world!