Android ViewPager初探:让页面滑动起来

ViewPager需要用到适配器PagerAAdapter,以下四个函数需要重写:

instantiateItem(ViewGroup container, int position):创建指定位置的页面视图。适配器增加即将创建的View视图到这里给定的container中。
destroyItem(ViewGroup container, int position, Object object):移除一个给定位置的页面。
getCount():返回当前有效视图的个数。
isViewFromObject(View view, Object object):判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图。

主界面的布局只要加上

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

即可:

activity_main.xml:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2                 xmlns:tools="http://schemas.android.com/tools"
 3                 android:layout_width="match_parent"
 4                 android:layout_height="match_parent"
 5                 tools:context=".MainActivity">
 6
 7     <android.support.v4.view.ViewPager
 8         android:id="@+id/viewpager"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_gravity="center"/>
12
13 </RelativeLayout>

决定ViewPager有3个页面,每个页面都要写布局:

以第一个first_page.xml为例:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3               android:layout_width="match_parent"
 4               android:layout_height="match_parent">
 5     <TextView
 6         android:layout_width="match_parent"
 7         android:layout_height="match_parent"
 8         android:gravity="center"
 9         android:text="这是第一页"
10         android:textSize="20sp"/>
11
12 </RelativeLayout>

MainActivity需要在onCreate里对其初始化,并调用适配器:

 1 package com.example.hopecapital.myapplication;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.support.v4.view.ViewPager;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8
 9 import java.util.ArrayList;
10 import java.util.List;
11
12
13 public class MainActivity extends Activity {
14     private View first,second,third;
15     private ViewPager viewPager;//对应 <android.support.v4.view.ViewPager/>控件
16     private List<View> viewList;//View数组
17
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22
23         /*初始化*/
24         viewPager = (ViewPager)findViewById(R.id.viewpager);
25         LayoutInflater inflater = getLayoutInflater();
26         first = inflater.inflate(R.layout.first_page,null);
27         second = inflater.inflate(R.layout.second_page,null);
28         third = inflater.inflate(R.layout.third_page,null);
29
30         viewList = new ArrayList<View>();// 将要分页显示的View装入数组中
31         viewList.add(first);
32         viewList.add(second);
33         viewList.add(third);
34
35         /*适配器部分*/
36         NewPagerAdapter pagerAdapter = new NewPagerAdapter(viewList);
37         viewPager.setAdapter(pagerAdapter);
38     }
39
40 }

最后也是最重要的,继承自PagerAdapter的适配器:

NewPagerAdapter.java:

 1 package com.example.hopecapital.myapplication;
 2
 3 import android.support.v4.view.PagerAdapter;
 4 import android.view.View;
 5 import android.view.ViewGroup;
 6
 7 import java.util.List;
 8
 9 /**
10  * Created by LT on 2015/7/27.
11  */
12 public class NewPagerAdapter extends PagerAdapter{
13     public List<View> viewList;
14
15     public NewPagerAdapter(List<View> viewList){
16         this.viewList = viewList;
17     }
18
19     /*下面四个函数是一定要重写的*/
20     @Override
21     public boolean isViewFromObject(View arg0,Object arg1){
22     //判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(判断key)
23         // TODO Auto-generated method stub
24         return arg0 == arg1;
25     }
26
27     @Override
28     public int getCount() {//返回要滑动的VIew的个数
29         // TODO Auto-generated method stub
30         return viewList.size();
31     }
32
33     @Override
34     public void destroyItem(ViewGroup container, int position,
35                             Object object) {//从当前container中删除指定位置(position)的View;
36         // TODO Auto-generated method stub
37         container.removeView(viewList.get(position));
38     }
39
40     @Override
41     public Object instantiateItem(ViewGroup container, int position) {
42     //实例化:将当前视图添加到container中,并返回当前View(传送key)
43         // TODO Auto-generated method stub
44         container.addView(viewList.get(position));
45
46         return viewList.get(position);
47     }
48 }

以上,便完成了简单的ViewPager。

时间: 2024-07-30 10:19:18

Android ViewPager初探:让页面滑动起来的相关文章

Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)

1) ViewPager提供了左右滑动切换页面的方法,但是它所提供的标题只是无语,估计没有真正的项目会照搬拿过来;并且它只能一页一页滑,我想直接查看最后一页要滑半天; 2) 看了腾讯新闻客户端感觉体验很好,所以就仿着写了,因为只是做个demo供大家交流也是给自己做个笔记,所以功能实现就行demo比较简单; 3) 有兴趣的可以在demo的基础拓展,如果哪里写得不好还望大家多多赐教.一起交流 4) 直接上主要代码,所以注释都写在代码里,最后会给工程包.(PS是在AS环境下生成的) 先放个效果图: M

ViewPager之多页面滑动切换

上图是我们需要实现的效果图,功能有如下三个: 1. 手势滑动可以切换界面,点击上面的引导一到引导四也可以切换到相应的画面. 2. 切换界面时,引导一到引导四下面的横线会相应的移动到对应的地方. 3. 没有手势时,界面会自动轮转,有种广告轮转的效果. 在这篇文章里,我们先实现第一个功能.为了实现这个功能,我们需要知道ViewPager控件,它是google SDk中自带的一个android-support-v4.jar的一个类,可以用来实现屏幕间的切换.这个包在我们创建新工程时会自动添加,因此无需

Android ViewPager和SlidingPaneLayout的滑动事件冲突处理方法(转载)

最近在做一个项目需要用到ViewPager加载广告图,布局中需要侧滑,用了android V4包里的SlidingPaneLayout控件(该控件在旧的v4包里面没有,需要更新v4包),项目中使用的时候,发现在滑动中ViewPager和SlidingPaneLayout滑动冲突了,当手指从左向右滑动时,ViewPager的滑动事件被SlidingPaneLayout屏蔽了,只能执行SlidingPaneLayout的事件,而从右往左滑时,则正常. 国内找了一些资料,发现不是特别好,最后还是靠VP

ViewPager之多页面滑动切换+游标滑动

我们先看下效果图 上图是我们需要实现的效果图,功能有如下三个: 1. 手势滑动可以切换界面,点击上面的引导一到引导四也可以切换到相应的画面. 2. 切换界面时,引导一到引导四下面的横线会相应的移动到对应的地方. 3. 没有手势时,界面会自动轮转,有种广告轮转的效果:有手势是,会停止轮转. 这里实现的时第二个功能. 思想:实现这个效果,其实是很简单的.一方面,我们需要初始化游标的状态,先获取一个TextView的宽度,然后把游标对应的ImageView的宽度也设置成这个大小,保证TextView和

ViewPager之多页面滑动切换+游标滑动+ 自动无限轮转+触摸停止

我们先看下效果图 上图是我们需要实现的效果图,功能有如下三个: 1. 手势滑动可以切换界面,点击上面的引导一到引导四也可以切换到相应的画面. 2. 切换界面时,引导一到引导四下面的横线会相应的移动到对应的地方. 3. 没有手势时,界面会自动轮转,有种广告轮转的效果:有手势是,会停止轮转. 这次要实现的是第三个功能,实现第三个功能主要用到Handler和ViewPager的触摸监听器. Handler是为了实现隔一段时间自动切换页卡,因此需要定义一个Handler的对象,来处理自动切换,具体思想是

android UI之ViewPager多页面滑动效果

  viewPager实现引导页 ViewPager多页面滑动效果 1.Android的左右滑动在实际编程经常能用到,比如查看多张图片,左右 切换tab页. 2.自android 3.0之后的SDK中提供了android-support-V4包用以实现 版本兼容,让老版本系统下的应用通过加入jar包实现扩展,其中有一 个可以实现左右滑动的类ViewPager 今天我们就用ViewPager类来实现引导页的实战案例 实现功能: 1.实现ViewPager多页面滑动效果. 2.下方的显示当前

android(8) ViewPager页面滑动切换

一.ViewPager页面滑动切换实现:    借鉴了别人的源码,还是比较容易实现的,而且这种效果还是经常使用的,特此记录一下: 效果图: 主界面: public class MainActivity extends Activity { private ViewPager mPager;// 页卡内容 private List<View> listViews; // Tab页面列表 private ImageView cursor;// 动画图片 private TextView t1, t

android ViewPager页面左右滑动切换

我们日常生活中用到的微博,QQ,微信等app在进行页面左右滑动的时候,很多都可以用ViewPager来实现.可以说,ViewPager在android开发中十分常见并且特别实用. Viewpager在android.support.v4.view这个软件包中, android.support.v4.view.jar是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.所以低版本开发时必须加入android-support-v4.jar,并且在XML

android ViewPager左右滑动实现导航栏的背景随页面滑动而滑动

实现viewPager和导航栏进行结合的效果图:废话不说直接上图看效果:      随着左右的滑动背景的黄色也随着滑动,代码如下: 布局  weibo_2.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=