ViewPager在v4包中,所以布局文件应该这么写: <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00000000" > </android.support.v4.view.ViewPager>
ViewPager的功能就是可以使视图滑动,用途主要有:首次启动应用的引导页,以及滑动的Tab界面设计。要注意的是,上面一段代码只是用来显示左右滑动的界面的,如果不加载xml布局文件,他是不会显示内容的。 这个和ListView很像。 //第1步,创建一个View的集合,并动态加载n个View,添加进集合 LayoutInflater inflater = LayoutInflater.from(this); views = new ArrayList<View>(); views.add(inflater.inflate(R.layout.guideone, null)); views.add(inflater.inflate(R.layout.guidetwo, null)); views.add(inflater.inflate(R.layout.guidethree, null)); //第2步,为ViewAdapter装载这个集合 vpAdapter = new ViewPagerAdapter(views, this); //第3步,给ViewPager设置ViewAdapter vp= (ViewPager) findViewById(R.id.view_pager); vp.setAdapter(vpAdapter);
此处我新创建的一个ViewPagerAdapter类继承自PaperAdapter,当然也可以直接new一个PagerAdapter。其中的内容也是分3个部分: public class ViewPagerAdapter extends PagerAdapter { //创建两个变量,并作为参数传入构造方法 private List<View> views ; private Context context; public ViewPagerAdapter(List<View> views, Context context) { super(); this.views = views; this.context = context; } //不要的时候,销毁View的方法,根据position进行索引,并制定View为ViewPager @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(views.get(position)); } //加载View的方法,类似于AdapterView中的getView方法 @Override public Object instantiateItem(ViewGroup container, int position) { //添加页卡(遍历View这个集合,加载所有View作为页卡) View view =views.get(position); container.addView(view); return view; } //直接返回View集合的大小即可 @Override public int getCount() { return views.size(); } //判断当前的View是否是我们需要的对象 @Override public boolean isViewFromObject(View arg0, Object arg1) { return (arg0 ==arg1); } } 下面是一个引导页的实例:
布局文件
代码除了上面创建的ViewAdapter子类外,还有3个activity分别为:主页面,欢迎页面,引导页页面。 public class Guide extends Activity implements OnPageChangeListener{ private ViewPager vp; private ViewPagerAdapter vpAdapter; private List<View> views; private ImageView [] dots; private int [] ids = {R.id.iv1,R.id.iv2,R.id.iv3}; private Button start_btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.guide); initViews(); initDots(); } //初始化方法中,先给ViewAdapter添加内容(就是3个View),然后给ViewPager设置ViewAdatper,最后添加监听事件回调方法 private void initViews() { LayoutInflater inflater = LayoutInflater.from(this); views = new ArrayList<View>(); views.add(inflater.inflate(R.layout.guideone, null)); views.add(inflater.inflate(R.layout.guidetwo, null)); views.add(inflater.inflate(R.layout.guidethree, null)); vpAdapter = new ViewPagerAdapter(views, this); vp= (ViewPager) findViewById(R.id.view_pager); vp.setAdapter(vpAdapter); //严重注意此处的Button不在我们的布局当中,当前的布局是guide,Button存在于集合中,所以要使用get,取得元素,和getChild是有区别的,不然会有空指针异常 start_btn = (Button) views.get(2).findViewById(R.id.start_btn); start_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Guide.this, MainActivity.class); startActivity(intent); //这个finish必须写上,不然后退回Guide界面就太丑了 finish(); } }); vp.setOnPageChangeListener(this); } //初始化dots方法中,找到了每一个dots的对象,相当于一个个find出来,但对于大型数据用两个数组的方式更好 private void initDots(){ dots = new ImageView[views.size()]; for(int i =0; i<views.size(); i++){ dots[i]= (ImageView) findViewById(ids[i]); } } //当前页面被选中时调用 @Override 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); } } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } } public class Welcome extends Activity { private boolean isFirstIn =false; private static final int Time =2000; private static final int Go_Home= 1000; private static final int Go_Guide= 1001; //在主线程中做 延时操作是不合理的,可以使用handler Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case Go_Home: go_Home(); break; case Go_Guide: go_Guide(); break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.welcome); init(); } private void init() { SharedPreferences preferences = getSharedPreferences("suibianqu", MODE_PRIVATE); //先去取isFirstI的值,如果没有,表明是第一次取,第一次取肯定是true isFirstIn = preferences.getBoolean("isFirstIn", true); //通过isFirstIn选择启动哪个页面,再将新boolean值存入SharedPreferences if(isFirstIn){ mHandler.sendEmptyMessageDelayed(Go_Guide, Time); //制定多少毫秒后发送空消息,第一个参数是一个int what值 Editor editor = preferences.edit(); editor.putBoolean("isFirstIn", false); editor.commit(); }else{ mHandler.sendEmptyMessageDelayed(Go_Home, Time); } } private void go_Home(){ Intent intent = new Intent(Welcome.this, MainActivity.class); startActivity(intent); finish(); //用了finish,就不能后退回welcome页面了, onActivityResult()也不能使用 } private void go_Guide(){ Intent intent = new Intent(Welcome.this, Guide.class); startActivity(intent); finish(); } }(责任编辑:好模板) |