Android开发之ViewPager
什么是ViewPager?
ViewPager是安卓3.0之后提供的新特性,继承自ViewGroup,专门用以实现左右滑动切换View的效果。
如果想向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自google提供的一个附加包。
通俗点来讲,就是现在市面上大多数app,安装完第一次打开软件会出现的一个左右滑动的引导界面。
布局代码:
要点1、页面的小圆点的控制,当在当前页时小圆点不可点。
所以有多少个页面就需要添加多少的圆点图片。
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.example.viewpager.MainActivity" >
- <android.support.v4.view.ViewPager
- android:id="@+id/viewpager"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- <LinearLayout
- android:id="@+id/ll"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:layout_marginBottom="20dp"
- android:orientation="horizontal" >
- <ImageView
- android:id="@+id/iv1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:clickable="true"
- android:padding="25dp"
- android:src="@drawable/point_selector" />
- <ImageView
- android:id="@+id/iv2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:clickable="true"
- android:padding="25dp"
- android:src="@drawable/point_selector" />
- <ImageView
- android:id="@+id/iv3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:clickable="true"
- android:padding="25dp"
- android:src="@drawable/point_selector" />
- <ImageView
- android:id="@+id/iv4"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:clickable="true"
- android:padding="25dp"
- android:src="@drawable/point_selector" />
- </LinearLayout>
- </RelativeLayout>
小圆点是否可点,则需要一个选择器,当当前页面可触碰,则小圆点为灰色,否则为白色
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:state_enabled="true" android:drawable="@drawable/page_now"></item>
- <item android:state_enabled="false" android:drawable="@drawable/page"></item>
- </selector>
pege_now和page为准备好的图片,分别是灰色小圆点和白色小圆点。
ViewPager和ListView都需要一个适配器,ViewPager需要适配器来提供要显示页面的页数、判断是否是view对象、实例化一个页面、删除一个页面等等。。
适配器代码:
- package com.example.viewpager;
- import java.util.List;
- import android.support.v4.view.PagerAdapter;
- import android.view.View;
- import android.view.ViewGroup;
- public class ImageAdapter extends PagerAdapter {
- private List<View> viewlist;
- public ImageAdapter(List<View> viewlist)
- {
- this.viewlist=viewlist;
- }
- @Override
- public int getCount() {//返回页面数
- // TODO Auto-generated method stub
- if (viewlist.size()!=0)
- {
- return viewlist.size();
- }
- return 0;
- }
- @Override
- public boolean isViewFromObject(View arg0, Object arg1) {//判断是否为view对象
- // TODO Auto-generated method stub
- return arg0==arg1;
- }
- public Object instantiateItem(ViewGroup container,int position)//实例化一个页面
- {
- container.addView(viewlist.get(position));
- return viewlist.get(position);
- }
- public void destroyItem(ViewGroup container, int position, Object object) {//销毁一个页卡
- container.removeView(viewlist.get(position));
- }
- }
MainActivity代码:
- package com.example.viewpager;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- 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.LayoutParams;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.ImageView.ScaleType;
- import android.widget.LinearLayout;
- public class MainActivity extends Activity implements OnClickListener, OnPageChangeListener{
- private ViewPager viewpager=null;
- private List<View> viewlist=null;
- //private View view1, view2, view3, view4;
- private int images[]=new int[]{R.drawable.p01,R.drawable.w07,R.drawable.w08,R.drawable.welcome};
- private ImageView points[];//存放小圆圈数组
- private int currentIndex=0;//当前页面,默认首页
- private static final String TAG="MainActivity";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initViewPager();
- initPoint();
- }
- public void initPoint()//初始化小圆点
- {
- LinearLayout ll=(LinearLayout)findViewById(R.id.ll);
- points=new ImageView[4];
- for (int i=0;i<points.length;i++)
- {
- points[i]=(ImageView)ll.getChildAt(i);
- points[i].setEnabled(true);
- points[i].setOnClickListener(this);
- points[i].setTag(i);//标识符与圆点顺序一致
- }
- currentIndex=0;
- points[currentIndex].setEnabled(false);
- }
- private void initViewPager()
- {
- viewpager=(ViewPager)findViewById(R.id.viewpager);
- viewlist=new ArrayList<View>();
- for (int i = 0; i < images.length; i++) {
- ImageView imageView = new ImageView(MainActivity.this);
- imageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
- imageView.setScaleType(ScaleType.FIT_XY);// 设置缩放样式
- imageView.setImageResource(images[i]);
- viewlist.add(imageView);
- }
- ImageAdapter adapter=new ImageAdapter(viewlist);//构造一个适配器
- viewpager.setAdapter(adapter);//给viewpager添加一个适配器
- viewpager.setOnPageChangeListener(this);//设置监听
- }
- @Override
- public void onClick(View arg0) {
- // TODO Auto-generated method stub
- Log.i("tuzi",arg0.getTag()+"");
- // viewpager.setCurrentItem(Integer.parseInt((String) arg0.getTag()));//需要直接跳转的某个页面的时候
- }
- @Override
- public void onPageScrollStateChanged(int arg0) {
- //此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。
- // TODO Auto-generated method stub
- }
- @Override
- public void onPageScrolled(int arg0, float arg1, int arg2) {
- // TODO Auto-generated method stub
- // 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。其中三个参数的含义分别为:
- // arg0 :当前页面,及你点击滑动的页面
- // arg1:当前页面偏移的百分比
- // arg2:当前页面偏移的像素位置
- }
- @Override
- public void onPageSelected(int arg0) {
- // TODO Auto-generated method stub
- points[arg0].setEnabled(false);
- points[currentIndex].setEnabled(true);
- currentIndex=arg0;
- }
- }
添加标题栏
PagerTabStrip与PagerTitleStrip的区别
其实这两个实现的效果基本差不多,但有两点不同:
1、PagerTabStrip在当前页面下,会有一个下划线条来提示当前页面的Tab是哪个。
2、PagerTabStrip的Tab是可以点击的,当用户点击某一个Tab时,当前页面就会跳转到这个页面,而PagerTitleStrip则没这个功能。
首先是PagerTitleStrip的用法
1、在布局文件添加上
<android.support.v4.view.PagerTitleStrip
android:id="@+id/pagetitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"/>
2、声明一个存放标题名称的数组
private ArrayList<String> titlelist=null;
并实例化
titlelist = new ArrayList<String>();// 每个页面的Title数据
titlelist.add("页面一");
titlelist.add("页面二");
titlelist.add("页面三");
3、在适配器中重写getPageTitle()函数
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titlelist.get(position);
}
注意点:要改适配器的构造函数
public ImageAdapter(List<View> viewlist,ArrayList<String> titlelist)
{
this.viewlist=viewlist;
this.titlelist=titlelist;
}
PagerTabStrip的用法和PagerTitleStrip相同
修改布局代码为:
<android.support.v4.view.PagerTabStrip
android:id="@+id/pagertab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"/>
Android开发之ViewPager的更多相关文章
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android开发之ViewPager的简单使用
ViewPager是V4包中的,如果你的编译器敲不出ViewPager,那么你就需要添加,看下面: 第一步:点击+号 第二步:选择第一个Library 第三步:添加这个包: 然后点击ok-->o ...
- Android开发之ViewPager实现轮播图(轮播广告)效果的自定义View
最近开发中需要做一个类似京东首页那样的广告轮播效果,于是采用ViewPager自己自定义了一个轮播图效果的View. 主要原理就是利用定时任务器定时切换ViewPager的页面. 效果图如下: 主页面 ...
- Android开发之ViewPager实现多页面切换及动画效果(仿Android的Launcher效果)
Android开发中经常会有引导页或者切换页面等效果,本文采用ViewPager结合动画效果来实现仿Launcher以及页面切换的效果.源码地址在文章最后给出下载. 效果图如下: 1.Vi ...
- Android开发之ViewPager做新手引导界面
先看一下我们要开发的界面(三张图片,滑到最后一个会出现开始体验的Button,下面的小红点会跟着一起滑动): 首先看一下布局文件: <?xml version="1.0" e ...
- Android开发之viewpager导报错误解决方法:错误代码 Caused by: java.lang.ClassNotFoundException: Didn't find class
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Caused by: java.lang.ClassNotFoundException: Didn't ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
- Android开发之InstanceState详解
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之Git配置
Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...
随机推荐
- iPhone丢失后通过iccid找回流程
切记,丢失IPHONE第一时间要去补卡,免得小偷刷机用你的卡激活,这样你查到的号码只会是你自己的号码找iphone有2个方法:ICCID和维修换机.两者之间没任何直接联系,请不要混淆!下面是总体流程图 ...
- Android的string-array数据源简单使用
在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的arrays.xml文件里 <?xml version= ...
- 【CSS】Beginner5:Margins&Padding
1.Properties for spacing-out elements 外边距:A margin is the space space outside something 内边距:padding ...
- HDU 1907
博弈入门题吧. 把尼姆博弈推广到n堆,都是用异或运算.还有个总结的地方是,只要先手面对的是奇异局势,则胜负都掌握在后手.本题,题目要求是最后拿完的输,尼姆博弈是最后拿完的赢.但实际上优先权都掌握在后手 ...
- 使用Windows Azure创建Windows系统虚拟机-下
如何在创建虚拟机之后登录虚拟机 这部分将展示如何登录到虚拟机,所以你可以管理它的设置和你会上面运行的应用程序. 注意: 对于要求和故障排除技巧,请参阅“使用RDP或SSH连接到Azure虚拟机”( C ...
- Linux下安装mysql5.6.11(找点有用的信息太费劲)(转)
Linux下安装mysql5.6.11(找点有用的信息太费劲) (2013-04-25 10:25:09) 1.申请阿里云Linux服务器 昨天在阿里云申请了一个免费试用5天的Linux云服务 ...
- algorithm@ dijkstra algorithm & prim algorithm
#include<iostream> #include<cstdio> #include<cstring> #include<limits> #incl ...
- java 关于多态的一点总结
http://www.cnblogs.com/wenruo/p/5352683.html 一直不是很理解多态,今天看了两遍<think in java>第八章,试着总结一下. 多态的本质就 ...
- nyoj 27 水池数目
水池数目 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地 ...
- Oracle数据库启动流程
1.oracle也可以通过命令的方式启动, (1)oracle启动流程-windows下 1) lsnrctl start (启动监听) 2)oradim -startup -sid 数据库实例名 2 ...