Android之ViewPager总结(一)

本文详细介绍如何使用ViewPager实现屏幕间的切换效果。包括新建项目引入ViewPager、构建不同界面布局、实现屏幕切换的核心代码等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    这几天修改应用中的一个Bug,涉及到ViewPager的相关知识,猛然间发现自己对ViewPager相关属性和使用有点模

糊。估计是以前缺乏总结,要用到相关的知识才去了解,达成目的之后,就放下再也不管了。没有总结就没有积

累,没有积累,就没有提高!好了,闲话不多说了,切入正题。既然已经用过ViewPager,现在吃回头草再来研究

ViewPager就应研究个透,打算将ViewPager的总结分几篇写,研究到哪个程度就写到哪个程度吧。今天是第一篇。

    先看下效果图。

    

一 新建项目,引入ViewPager。

    ViewPager是android.support.v4.view包中的类,可以用来实现屏幕间的切换。在主布局文件中添加ViewPager,

如下所示的。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context="com.example.testviewpage_1.MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

</RelativeLayout>

    其中<android.support.v4.view.ViewPager />是ViewPager对应的组件,要将其放到想滑动的位置。

二 构建三个layout,用于滑动切换的界面。

1.layout1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical" >
    

</LinearLayout>

2.layout2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffff00"
    android:orientation="vertical" >
    

</LinearLayout>

3.layout3.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff00ff"
    android:orientation="vertical" >
    

</LinearLayout>

    三个要滑动的界面非常简单,里面没有任何的控件。你也可以往里面添加各种控件,这里只为了讲解相关的原

理,所以仅用背景颜色来区分不同的layout布局。

三 屏幕切换的实现

    核心代码如下。

package com.example.testviewpage_1;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MainActivity extends Activity {

	private View view1, view2, view3;
	private ViewPager viewPager; // 对应的viewPager

	private List<View> viewList;// view数组

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		viewPager = (ViewPager) findViewById(R.id.viewpager);
		LayoutInflater inflater = getLayoutInflater();
		view1 = inflater.inflate(R.layout.layout1, null);
		view2 = inflater.inflate(R.layout.layout2, null);
		view3 = inflater.inflate(R.layout.layout3, null);

		viewList = new ArrayList<View>();// 将要分页显示的View装入数组中
		viewList.add(view1);
		viewList.add(view2);
		viewList.add(view3);

		PagerAdapter pagerAdapter = new PagerAdapter() {

			@Override
			public boolean isViewFromObject(View arg0, Object arg1) {
				return arg0 == arg1;
			}

			@Override
			public int getCount() {
				return viewList.size();
			}

			@Override
			public void destroyItem(ViewGroup container, int position,
					Object object) {
				container.removeView(viewList.get(position));
			}

			@Override
			public Object instantiateItem(ViewGroup container, int position) {
				container.addView(viewList.get(position));
				return viewList.get(position);
			}
		};
		viewPager.setAdapter(pagerAdapter);
	}
}

    现在开始逐步分析上述代码。

private View view1, view2, view3;
private ViewPager viewPager; // 对应的viewPager

private List<View> viewList;// view数组

    如上所述,view1,view2 ,view3对应我们的三个layout,即layout1.xml,layout2.xml,layout3.xml

viewList是一个View数组,盛装上面的三个View。

viewPager = (ViewPager) findViewById(R.id.viewpager);
LayoutInflater inflater = getLayoutInflater();
view1 = inflater.inflate(R.layout.layout1, null);
view2 = inflater.inflate(R.layout.layout2, null);
view3 = inflater.inflate(R.layout.layout3, null);

viewList = new ArrayList<View>();// 将要分页显示的View装入数组中
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);

    上述初始化过程难度不大,就是将资源与变量联系起来布局,最后将实例化的view1,view2,view3添加到

viewList中。

3.1 PagerAdapter——ViewPager的适配器

    适配器这东东,想必大家都不会陌生。PagerAdapter比较特殊,必须重写如下四个方法。

  • instantiateItem(ViewGroup, int)
  • destroyItem(ViewGroup, int, Object)
  • getCount()
  • isViewFromObject(View, Object)

    看看我们是怎样重写上述方法的。

    instantiateItem():做了两件事,第一:将当前视图添加到container中,第二:返回当前View。

@Override
public Object instantiateItem(ViewGroup container, int position) {
    container.addView(viewList.get(position));
    return viewList.get(position);
}

            destroyItem():从当前container中删除指定位置(position)的View。

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView(viewList.get(position));
}

    getCount():返回要滑动的View的个数。

@Override
public int getCount() {
    return viewList.size();
}

            isViewFromObject():对于这个方法就先不做讲解,大家目前先知道它要这样重写就行了,后面我们会对它进行改写。

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == arg1;
}

    源码下载地址:http://download.youkuaiyun.com/detail/yangtinghui7/9700519







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值