【Android基础笔记21】ViewPager

来源:互联网 发布:ipsec提供网络层之上 编辑:程序博客网 时间:2024/06/11 03:50

一、ViewPager简介:
(一)、引入:
        主要可以实现左右滑动展示数据 适配需要通过PagerAdapter

ViewPager展示ImageView代码如下:

public class MainActivity extends Activity {

private ViewPager viewPager;

private int[] images={R.drawable.txt_theme12,R.drawable.txt_theme14,R.drawable.txt_theme30};

private List<ImageView> list;

private ImageView[] icons;//存储指示图片的数组

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

viewPager=(ViewPager) findViewById(R.id.viewpager);

list=new ArrayList<ImageView>();

for(int i=0;i<images.length;i++){

ImageView imageView=new ImageView(this);

imageView.setImageResource(images[i]);

list.add(imageView);

}

viewPager.setAdapter(new MyPagerAdapter());

viewPager.setOffscreenPageLimit(2);//设置viewpager预加载的page的个数的限制

 

initicons();

/*

* 表示当前测viewpager中的page的状态发生改变时回调的接口

*/

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

/* 

* 表示当一个新的page界面被选中时回调的方法

* 参数表示 当前选择的page在viewpager中的下标

*/

@Override

public void onPageSelected(int position) {

//通过循环将指示性的图片全部设置为未选中状态

for(int i=0;i<images.length;i++){

icons[i].setEnabled(true);

}

icons[position].setEnabled(false);//根据下标找到当前选中图片对应的imageview  设置为选中

}

/*

* 表示当viewpager中的page发生滚动时回调的方法

* 第一个参数表示 当前滚动的page的下标

* 第二个参数表示 当前page页滑动的偏移量  [0,1)

* 第三个参数表示 当前page页滑动的偏移量  像素值表示

*/

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

//System.out.println("--------onPageScrolled------"+positionOffset);

//System.out.println("----onPageScrolled--"+positionOffsetPixels);

}

/*

* 表示当前viewpager中的page的状态改变的时候回调的方法

* 参数表示 当前page页的状态

* SCROLL_STATE_DRAGGING 正在滑动状态

* SCROLL_STATE_IDLE  停止滑动状态

* SCROLL_STATE_SETTLING 选中状态

*/

@Override

public void onPageScrollStateChanged(int state) {

}

});

}

/**

* 初始化指示性图片的方法

*/

public void initicons(){

LinearLayout linearLayout=(LinearLayout) findViewById(R.id.linearLayout);

icons=new ImageView[images.length];//初始化指示性图片的存储数组

for(int i=0;i<images.length;i++){

icons[i]=(ImageView) linearLayout.getChildAt(i);//以此从LinearLayout中取出imageview 存放到icons数组中

icons[i].setEnabled(true);

icons[i].setTag(i);//给指示性图片添加下标指示

//指示性图片添加单击事件

icons[i].setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// 将viewpager中的page页设置为指定的下标

viewPager.setCurrentItem((Integer) v.getTag()); //单击那个指示图标 就将该指示图片下标对应的page展示

}

});

}

icons[0].setEnabled(false);//icons数组中的第一个imageview默认显示选中状态的图片

}

/**

* 继承pageradapter的适配器

*

*/

public class MyPagerAdapter extends PagerAdapter{


@Override

public int getCount() {

return list.size();

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

container.addView(list.get(position));

return list.get(position);

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView(list.get(position));

}

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0==arg1;

}

}



示例代码2——实现viewpager中除了page页的内容还存在标题

  <android.support.v4.view.ViewPager

        android:id="@+id/viewpager"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        >

        <android.support.v4.view.PagerTitleStrip

            android:id="@+id/pagerTile"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

            >

        </android.support.v4.view.PagerTitleStrip>

    </android.support.v4.view.ViewPager>




public class MainActivity extends Activity {

private ViewPager viewPager;

private PagerTitleStrip pagerTitleStrip;

private List<View> views;

private List<String> titles;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

viewPager=(ViewPager) findViewById(R.id.viewpager);

pagerTitleStrip=(PagerTitleStrip) findViewById(R.id.pagerTile);

// viewpager中的page页面添加内容

views=new ArrayList<View>();

views.add(LayoutInflater.from(this).inflate(R.layout.activity_page1, null));

views.add(LayoutInflater.from(this).inflate(R.layout.activity_page2, null));

views.add(LayoutInflater.from(this).inflate(R.layout.activity_page3, null));

views.add(LayoutInflater.from(this).inflate(R.layout.activity_page4, null));

titles=new ArrayList<String>();

titles.add("新闻");

titles.add("头条");

titles.add("娱乐");

titles.add("体育");

viewPager.setAdapter(new MyPagerAdapter());

}

public class MyPagerAdapter extends PagerAdapter{


@Override

public int getCount() {

return views.size();

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

container.addView(views.get(position));

return views.get(position);

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView(views.get(position));

}

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0==arg1;

}

//android.support.v4.view.PagerTitleStrip给page界面添加标题 给控件填充标题内容

@Override

public CharSequence getPageTitle(int position) {

return titles.get(position);

}

}


}




三、系统自带ContentProvider的常用Uri地址


public class MainActivity extends FragmentActivity {private ViewPager viewPager;private LinearLayout linearLayout;private TextView[] titles;private List<Fragment> fragments;//viewpager的数据源@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager=(ViewPager) findViewById(R.id.viewpager);linearLayout=(LinearLayout) findViewById(R.id.linearlayout);initTitles();initViewPager();}//针对viewpager测操作的方法public void initViewPager(){fragments=new ArrayList<Fragment>();Bundle bundle=new Bundle();// 头条Fragment fragment1=new FragmentShow();bundle.putInt("tabIndex",1);fragment1.setArguments(bundle);//新闻Fragment fragment2=new FragmentShow();bundle=new Bundle();bundle.putInt("tabIndex", 2);fragment2.setArguments(bundle);//娱乐Fragment fragment3=new FragmentShow();bundle=new Bundle();bundle.putInt("tabIndex",3);fragment3.setArguments(bundle);fragments.add(fragment1);fragments.add(fragment2);fragments.add(fragment3);viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager()));viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {for(int i=0;i<fragments.size();i++){titles[i].setBackgroundColor(Color.WHITE);}titles[position].setBackgroundColor(Color.GREEN);}@Overridepublic void onPageScrolled(int position, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int state) {}});}/** * 如果viewpager中的每个page中显示的是fragment可以使用FragmentPagerAdapter适配数据 * */public class MyFragmentPagerAdapter extends FragmentPagerAdapter{public MyFragmentPagerAdapter(FragmentManager fm) {super(fm);}/* 表示根据指定的下标返回page中对应的fragment */@Overridepublic Fragment getItem(int position) {return fragments.get(position);}/*表示当前适配器中的条目数量 */@Overridepublic int getCount() {return fragments.size();}}//初始化标题栏 导航public void initTitles(){titles=new TextView[3];//将导航的textview存放到textview类型的数组中for(int i=0;i<3;i++){titles[i]=(TextView) linearLayout.getChildAt(i);titles[i].setBackgroundColor(Color.WHITE);//将textview导航的背景默认设置为白色titles[i].setTag(i);titles[i].setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {viewPager.setCurrentItem((Integer) v.getTag());}});}titles[0].setBackgroundColor(Color.GREEN);//默认选中的page的第一个 所以将textview的第一个导航设置绿色 选中状态}}

 


ViewPager

一、ViewPager简介:
(一)、引入:
        主要可以实现左右滑动展示数据 适配需要通过PagerAdapter

ViewPager展示ImageView代码如下:

public class MainActivity extends Activity {

private ViewPager viewPager;

private int[] images={R.drawable.txt_theme12,R.drawable.txt_theme14,R.drawable.txt_theme30};

private List<ImageView> list;

private ImageView[] icons;//存储指示图片的数组

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

viewPager=(ViewPager) findViewById(R.id.viewpager);

list=new ArrayList<ImageView>();

for(int i=0;i<images.length;i++){

ImageView imageView=new ImageView(this);

imageView.setImageResource(images[i]);

list.add(imageView);

}

viewPager.setAdapter(new MyPagerAdapter());

viewPager.setOffscreenPageLimit(2);//设置viewpager预加载的page的个数的限制

 

initicons();

/*

* 表示当前测viewpager中的page的状态发生改变时回调的接口

*/

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

/* 

* 表示当一个新的page界面被选中时回调的方法

* 参数表示 当前选择的page在viewpager中的下标

*/

@Override

public void onPageSelected(int position) {

//通过循环将指示性的图片全部设置为未选中状态

for(int i=0;i<images.length;i++){

icons[i].setEnabled(true);

}

icons[position].setEnabled(false);//根据下标找到当前选中图片对应的imageview  设置为选中

}

/*

* 表示当viewpager中的page发生滚动时回调的方法

* 第一个参数表示 当前滚动的page的下标

* 第二个参数表示 当前page页滑动的偏移量  [0,1)

* 第三个参数表示 当前page页滑动的偏移量  像素值表示

*/

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

//System.out.println("--------onPageScrolled------"+positionOffset);

//System.out.println("----onPageScrolled--"+positionOffsetPixels);

}

/*

* 表示当前viewpager中的page的状态改变的时候回调的方法

* 参数表示 当前page页的状态

* SCROLL_STATE_DRAGGING 正在滑动状态

* SCROLL_STATE_IDLE  停止滑动状态

* SCROLL_STATE_SETTLING 选中状态

*/

@Override

public void onPageScrollStateChanged(int state) {

}

});

}

/**

* 初始化指示性图片的方法

*/

public void initicons(){

LinearLayout linearLayout=(LinearLayout) findViewById(R.id.linearLayout);

icons=new ImageView[images.length];//初始化指示性图片的存储数组

for(int i=0;i<images.length;i++){

icons[i]=(ImageView) linearLayout.getChildAt(i);//以此从LinearLayout中取出imageview 存放到icons数组中

icons[i].setEnabled(true);

icons[i].setTag(i);//给指示性图片添加下标指示

//指示性图片添加单击事件

icons[i].setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// 将viewpager中的page页设置为指定的下标

viewPager.setCurrentItem((Integer) v.getTag()); //单击那个指示图标 就将该指示图片下标对应的page展示

}

});

}

icons[0].setEnabled(false);//icons数组中的第一个imageview默认显示选中状态的图片

}

/**

* 继承pageradapter的适配器

*

*/

public class MyPagerAdapter extends PagerAdapter{


@Override

public int getCount() {

return list.size();

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

container.addView(list.get(position));

return list.get(position);

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView(list.get(position));

}

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0==arg1;

}

}



示例代码2——实现viewpager中除了page页的内容还存在标题

  <android.support.v4.view.ViewPager

        android:id="@+id/viewpager"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        >

        <android.support.v4.view.PagerTitleStrip

            android:id="@+id/pagerTile"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

            >

        </android.support.v4.view.PagerTitleStrip>

    </android.support.v4.view.ViewPager>




public class MainActivity extends Activity {

private ViewPager viewPager;

private PagerTitleStrip pagerTitleStrip;

private List<View> views;

private List<String> titles;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

viewPager=(ViewPager) findViewById(R.id.viewpager);

pagerTitleStrip=(PagerTitleStrip) findViewById(R.id.pagerTile);

// viewpager中的page页面添加内容

views=new ArrayList<View>();

views.add(LayoutInflater.from(this).inflate(R.layout.activity_page1, null));

views.add(LayoutInflater.from(this).inflate(R.layout.activity_page2, null));

views.add(LayoutInflater.from(this).inflate(R.layout.activity_page3, null));

views.add(LayoutInflater.from(this).inflate(R.layout.activity_page4, null));

titles=new ArrayList<String>();

titles.add("新闻");

titles.add("头条");

titles.add("娱乐");

titles.add("体育");

viewPager.setAdapter(new MyPagerAdapter());

}

public class MyPagerAdapter extends PagerAdapter{


@Override

public int getCount() {

return views.size();

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

container.addView(views.get(position));

return views.get(position);

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView(views.get(position));

}

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0==arg1;

}

//android.support.v4.view.PagerTitleStrip给page界面添加标题 给控件填充标题内容

@Override

public CharSequence getPageTitle(int position) {

return titles.get(position);

}

}


}




三、系统自带ContentProvider的常用Uri地址


public class MainActivity extends FragmentActivity {private ViewPager viewPager;private LinearLayout linearLayout;private TextView[] titles;private List<Fragment> fragments;//viewpager的数据源@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager=(ViewPager) findViewById(R.id.viewpager);linearLayout=(LinearLayout) findViewById(R.id.linearlayout);initTitles();initViewPager();}//针对viewpager测操作的方法public void initViewPager(){fragments=new ArrayList<Fragment>();Bundle bundle=new Bundle();// 头条Fragment fragment1=new FragmentShow();bundle.putInt("tabIndex",1);fragment1.setArguments(bundle);//新闻Fragment fragment2=new FragmentShow();bundle=new Bundle();bundle.putInt("tabIndex", 2);fragment2.setArguments(bundle);//娱乐Fragment fragment3=new FragmentShow();bundle=new Bundle();bundle.putInt("tabIndex",3);fragment3.setArguments(bundle);fragments.add(fragment1);fragments.add(fragment2);fragments.add(fragment3);viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager()));viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {for(int i=0;i<fragments.size();i++){titles[i].setBackgroundColor(Color.WHITE);}titles[position].setBackgroundColor(Color.GREEN);}@Overridepublic void onPageScrolled(int position, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int state) {}});}/** * 如果viewpager中的每个page中显示的是fragment可以使用FragmentPagerAdapter适配数据 * */public class MyFragmentPagerAdapter extends FragmentPagerAdapter{public MyFragmentPagerAdapter(FragmentManager fm) {super(fm);}/* 表示根据指定的下标返回page中对应的fragment */@Overridepublic Fragment getItem(int position) {return fragments.get(position);}/*表示当前适配器中的条目数量 */@Overridepublic int getCount() {return fragments.size();}}//初始化标题栏 导航public void initTitles(){titles=new TextView[3];//将导航的textview存放到textview类型的数组中for(int i=0;i<3;i++){titles[i]=(TextView) linearLayout.getChildAt(i);titles[i].setBackgroundColor(Color.WHITE);//将textview导航的背景默认设置为白色titles[i].setTag(i);titles[i].setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {viewPager.setCurrentItem((Integer) v.getTag());}});}titles[0].setBackgroundColor(Color.GREEN);//默认选中的page的第一个 所以将textview的第一个导航设置绿色 选中状态}}

 


0 0
原创粉丝点击