本文共 3463 字,大约阅读时间需要 11 分钟。
ViewPager可以方便的实现左右滑动的导航页面的效果,使用方法和ListView差不多
1. 布局文件中声明
2. 自定义适配器,实现相关方法(添加要显示的view)
3. 代码中findviewbyid找到对象,设置自定义适配器
package com.example.guide;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.ImageView;public class GuideActivity extends Activity { private ViewPager viewPager; private Button button; private ListarrayList; public String tag = "GuideActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.guide); viewPager = (ViewPager) findViewById(R.id.view_pager); button = (Button) findViewById(R.id.button); initData(); //设置一个数据适配器 viewPager.setAdapter(new MyPagerAdapter()); //监听viewpager选中界面的方法 viewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { if(arg0 == arrayList.size()-1){ //停留在最后一个界面 button.setVisibility(View.VISIBLE); //注册一个点击事件 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //跳转操作 Intent intent = new Intent(GuideActivity.this, MainActivity.class); startActivity(intent); //关闭当前界面 finish(); } }); }else{ //停留在其他界面 button.setVisibility(View.GONE); } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); } private void initData() { ImageView imageView = new ImageView(getApplicationContext()); imageView.setBackgroundResource(R.drawable.guide_1); ImageView imageView1 = new ImageView(getApplicationContext()); imageView1.setBackgroundResource(R.drawable.guide_2); ImageView imageView2 = new ImageView(getApplicationContext()); imageView2.setBackgroundResource(R.drawable.guide_3); arrayList = new ArrayList (); arrayList.add(imageView); arrayList.add(imageView1); arrayList.add(imageView2); } //viewpager默认有一个预先加载将要展示的界面 class MyPagerAdapter extends PagerAdapter{ @Override public int getCount() { return arrayList.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } //给viewpager填充view的方法 @Override public Object instantiateItem(ViewGroup container, int position) { //添加viewpager中item的所在位置 Log.i(tag,"instantiateItem position = "+position); //将imageview添加到viewpager中 container.addView(arrayList.get(position)); //返回添加的imageview return arrayList.get(position); } //给viewpager移除view的方法 @Override public void destroyItem(ViewGroup container, int position, Object object) { Log.i(tag,"destroyItem position = "+position); container.removeView((View)object); } }}
注意PagerAdapter的预加载和缓存机制,
默认预先加载后一个pager,保留前一个pager
也就是说在第0个pager的时候,已经调用了第1个pager的instantiateItem函数了
在第1个pager的时候,已经调用了第2个pager的instantiateItem函数了,而第0个的destroyItem还不会被调用
在第2个pager的时候,已经调用了第3个pager的instantiateItem函数了,此时第0个destroyItem才会被调用
ViewPager可以滑动切换pager,也可以用代码切换到指定pager
viewPager.setCurrentItem(0);
转载地址:http://adxui.baihongyu.com/