ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的View类。

  ViewPager类需要一个PagerAdapter适配器类给它提供数据。

  ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步骤来使用它:

  1.在住布局文件里加入

  2.加载要显示的页卡

  3.在Activity里实例化ViewPager组件,并设置它的Adapter(就是PagerAdapter,方法与ListView一样的),在这里一般需要重写PagerAdapter。

当你实现一个PagerAdapter,你必须至少覆盖以下方法:

  1. instantiateItem(ViewGroup, int) //返回视图对象

  2. destroyItem(ViewGroup, int, Object) //销毁视图对象

  3. getCount() //视图个数

  4. isViewFromObject(View, Object) //一般传入arg0==arg1.用来判断两个视图是否是等价的

XML配置

  <android.support.v4.view.ViewPager

    android:id="@+id/viewpager"  

    android:layout_width="wrap_content"

    android:layout_height="wrap_content" >  

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

在res/drawable下建立选择器

point_selector.xml 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- <android.support.design.widget.TabLayout
android:id="@+id/tablelayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />--> <android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--系统默认PagerTabStrip和PagerTabStrip指示器的唯一区别是
PagerTabStrip可以点,PagerTabStrip不能点-->
<android.support.v4.view.PagerTabStrip
android:id="@+id/pts"
android:layout_width="match_parent"
android:layout_height="wrap_content"> </android.support.v4.view.PagerTabStrip> </android.support.v4.view.ViewPager>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_points"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_marginBottom="50dp"
android:layout_centerHorizontal="true"> </LinearLayout>
</RelativeLayout>

activity_main.xml

 public class MainActivity extends AppCompatActivity {

     ViewPager viewPager;
Timer timer;
LinearLayout ll_points;
//TabLayout tablayout; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewPager);
initPoints(); //tablayout = (TabLayout) findViewById(R.id.tablayout); viewPager.setAdapter(new MyPagerAdapter()); //指示器也需要在设置适配器之后,还有默认不能设置成无限滚动,所以
//tablayout.setupWithViewPager(viewPager); //必须在设置适配器之后设置默认中间页
//viewPager.setCurrentItem(Integer.MAX_VALUE / 2); viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % 6);
//viewPager.setCurrentItem(0);
//设置自动轮播
startAuto(); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//无限页
} int currentIndex = 0;//一开始是第0页,已经被选中
@Override
public void onPageSelected(int position) {
//页面选择时
Toast.makeText(MainActivity.this,position+"页",Toast.LENGTH_SHORT).show();
ll_points.getChildAt(currentIndex).setSelected(false);
ll_points.getChildAt(position % 6).setSelected(true);
currentIndex = position % 6;
} @Override
public void onPageScrollStateChanged(int state) {
//状态改变
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
//停止自动滚动
} else {
//开始滚动
}
}
}); } private void initPoints() {
ll_points = (LinearLayout) findViewById(R.id.ll_points);
for (int i = 0; i < 6; i++) {
View view = new View(getBaseContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20,20);
params.setMargins(10,10,10,10);
view.setBackgroundResource(R.drawable.point_selector);
view.setLayoutParams(params);
ll_points.addView(view);
} //默认第0个被选中
ll_points.getChildAt(0).setSelected(true); } public void startAuto(){
//计时器
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//修改UI子线程中修改
runOnUiThread(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
}
}); }
}, 3000, 3000);
} public void stop(){
if(timer != null){
timer.cancel();
}
} class MyPagerAdapter extends PagerAdapter {
//每一个ViewPager就是一个页面
List<View> mList = new ArrayList<>();
int[] imgId = new int[]{R.mipmap.img01, R.mipmap.img02, R.mipmap.img03, R.mipmap.img04, R.mipmap.img05, R.mipmap.img06}; public MyPagerAdapter(){
for(int i=0; i<6; i++){
ImageView img = new ImageView(getBaseContext());
img.setImageResource(imgId[i]);
img.setScaleType(ImageView.ScaleType.FIT_XY);
mList.add(img);
}
}
@Override
public int getCount() {
//return mList.size();
//轮播设置最大值
return Integer.MAX_VALUE;
} @Override
public boolean isViewFromObject(View view, Object object) {
//判断两页是否相同,google要求这样写
return view == object;
} //加载视图对象,不要弄成View container的函数,这个已经是过期的了
@Override
public Object instantiateItem(ViewGroup container, int position) {
//添加视图到ViewGroup中
container.addView(mList.get(position % 6));
return mList.get(position % 6);
} //销毁一个视图
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mList.get(position % 6));
} String[] titles = {"第一页","第二页","第三页","第四页","第五页","第六页"}; //给定系统的指示器的时候,需要重写getPageTitle方法
@Override
public CharSequence getPageTitle(int position) {
return titles[position % 6];
}
} }

MainActivity.java

下面是使用

  android.support.design.widget.TabLayout的效果,需要导入jar studio可以远程依赖

  在布局中添加TabLayout
  在viewPager设置适配器后,调用setupWithViewPager(vp);但是默认不能设置无限页滚动

Android ViewPager PagerAdapter 图片轮播的更多相关文章

  1. Android Viewpager实现图片轮播(仿优酷效果)

    1 http://blog.csdn.net/t12x3456/article/details/8160128 2 http://www.cnblogs.com/androidez/archive/2 ...

  2. 通过ViewPager 实现图片轮播

    通过ViewPager 实现图片轮播 首先来个效果图 布局文件: LinearLayout 用来存放下方的几个小白点. <?xml version="1.0" encodin ...

  3. 用viewpager实现图片轮播

    应用中常常遇到图片轮播的需求,这时候就需要用到viewpager这个组件.viewpager是android support v4 中提供的一个组件.viewpager使用需要以下几步骤: 1.在布局 ...

  4. Android ViewPager实现图片标题轮播和点击事件

    我看别人的文章,最喜欢看有图的.然后先找图看. 那我就先上效果图: 实现了图片自动轮播,手动滑动,轮播标题,以及点击事件.下面开始: 一.资源文件: 首先是布局: <?xml version=& ...

  5. android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据

    public class SlideShowAdView extends FrameLayout { //轮播图图片数量    private static int IMAGE_COUNT = 3;  ...

  6. Viewpager实现图片轮播

    //-------------主布局文件------------------------------------- <LinearLayout xmlns:android="http: ...

  7. Android 使用ViewPager 做的半吊子的图片轮播

    Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...

  8. Android 图片轮播(最简单的)

    布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  9. Android学习笔记之图片轮播...

    PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...

随机推荐

  1. SGU 162.Pyramids

    时间限制:0.25s 空间限制:6M; 题意: 按照AB, AC, AD, BC, BD, CD.给出一个空间四面体的6条边长.求出它的体积. Solution: 欧拉四面体公式:           ...

  2. css3基础教程十六变形与动画animation

    前面我们讲过的变形与动画一般都是通过鼠标的单击.获得焦点,被点击或对元素进行一定改变后以后触发效果的,那么有没有像Flash一样自动播放的动画效果呢?答案当然是肯定的,这就是我们今天要讲到的anima ...

  3. javascript--15条规则解析JavaScript对象布局(__proto__、prototype、constructor)

    大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人 ...

  4. IOS下双击背景, touchmove, 阻止页面背景scroll.

    ios prevent dblclick(tap) page scrollhtml add:("minimal-ui" is very important) <meta na ...

  5. php计算时间差/两个时间日期相隔的天数,时,分,秒.

    function timediff( $begin_time, $end_time ) { if ( $begin_time < $end_time ) { $starttime = $begi ...

  6. display:inline 跟 display:block 跟 display:inline-block区别

    我来说句人话吧.display:inline; 内联元素,简单来说就是在同一行显示.display:block; 块级元素,简单来说就是就是有换行,会换到第二行.display:inline-bloc ...

  7. python django 自定义 装饰器

    # -*-coding:utf-8-*- __author__ = "GILANG (pleasurelong@foxmail.com)" """ d ...

  8. NSEnumerator用法小结

    NSEnumerator   3)枚举 (NSEnumerator)遍历数组每个索引处的对象,你可以编写一个0到[array count]的循环,而NSEnumerator用来描述这种集合迭代运算的方 ...

  9. 转载:.NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

  10. BZOJ 1208 宠物收养所

    Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...