ViewPager需要android-support-v4.jar这个包的支持,来自google提供的一个附加包。大家搜下即可。

ViewPager主要用来组织一组数据,并且通过左右滑动的方式来展示。

现在的大多数应用都会有一个欢迎引导页面,如图所示,通过左右滑动来告知用户一些功能特性。

这个引导图效果用ViewPager可以很轻松的实现。

正如前面所说,ViewPager是用来展示一组数据的,所以肯定需要Adapter来绑定数据和view。先写一个Adapter:

  1. package com.notice.viewpagerd;
  2. import java.util.List;
  3. import android.os.Parcelable;
  4. import android.support.v4.view.PagerAdapter;
  5. import android.support.v4.view.ViewPager;
  6. import android.view.View;
  7. public class ViewPagerAdapter extends PagerAdapter{
  8. //界面列表
  9. private List<View> views;
  10. public ViewPagerAdapter (List<View> views){
  11. this.views = views;
  12. }
  13. //销毁arg1位置的界面
  14. @Override
  15. public void destroyItem(View arg0, int arg1, Object arg2) {
  16. ((ViewPager) arg0).removeView(views.get(arg1));
  17. }
  18. @Override
  19. public void finishUpdate(View arg0) {
  20. // TODO Auto-generated method stub
  21. }
  22. //获得当前界面数
  23. @Override
  24. public int getCount() {
  25. if (views != null)
  26. {
  27. return views.size();
  28. }
  29. return 0;
  30. }
  31. //初始化arg1位置的界面
  32. @Override
  33. public Object instantiateItem(View arg0, int arg1) {
  34. ((ViewPager) arg0).addView(views.get(arg1), 0);
  35. return views.get(arg1);
  36. }
  37. //判断是否由对象生成界面
  38. @Override
  39. public boolean isViewFromObject(View arg0, Object arg1) {
  40. return (arg0 == arg1);
  41. }
  42. @Override
  43. public void restoreState(Parcelable arg0, ClassLoader arg1) {
  44. // TODO Auto-generated method stub
  45. }
  46. @Override
  47. public Parcelable saveState() {
  48. // TODO Auto-generated method stub
  49. return null;
  50. }
  51. @Override
  52. public void startUpdate(View arg0) {
  53. // TODO Auto-generated method stub
  54. }
  55. }

这里我们要绑定的每一个item就是一个引导界面,我们用一个list来保存。

通过继承PagerAdapter,并实现几个我写注释的方法即可。

布局界面比较简单,加入ViewPager组件,以及底部的引导小点:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <android.support.v4.view.ViewPager
  7. android:id="@+id/viewpager"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. />
  11. <LinearLayout
  12. android:id="@+id/ll"
  13. android:orientation="horizontal"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:layout_marginBottom="24.0dip"
  17. android:layout_alignParentBottom="true"
  18. android:layout_centerHorizontal="true">
  19. <ImageView
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:layout_gravity="center_vertical"
  23. android:clickable="true"
  24. android:padding="15.0dip"
  25. android:src="@drawable/dot" />
  26. <ImageView
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:layout_gravity="center_vertical"
  30. android:clickable="true"
  31. android:padding="15.0dip"
  32. android:src="@drawable/dot" />
  33. <ImageView
  34. android:layout_width="wrap_content"
  35. android:layout_height="wrap_content"
  36. android:layout_gravity="center_vertical"
  37. android:clickable="true"
  38. android:padding="15.0dip"
  39. android:src="@drawable/dot" />
  40. <ImageView
  41. android:layout_width="wrap_content"
  42. android:layout_height="wrap_content"
  43. android:layout_gravity="center_vertical"
  44. android:clickable="true"
  45. android:padding="15.0dip"
  46. android:src="@drawable/dot" />
  47. </LinearLayout>
  48. </RelativeLayout>

其中小点的图片用一个selector来控制颜色(设置item的enable为true或者false)

dot.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <selector
  3. xmlns:android="http://schemas.android.com/apk/res/android">
  4. <item android:state_enabled="true" android:drawable="@drawable/dark_dot" />
  5. <item android:state_enabled="false" android:drawable="@drawable/white_dot" />
  6. </selector>

下面就是写Activity了。

  1. package com.notice.viewpagerd;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.support.v4.view.ViewPager;
  7. import android.support.v4.view.ViewPager.OnPageChangeListener;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.ImageView;
  11. import android.widget.LinearLayout;
  12. public class ViewPagerDemoActivity extends Activity implements OnClickListener, OnPageChangeListener{
  13. private ViewPager vp;
  14. private ViewPagerAdapter vpAdapter;
  15. private List<View> views;
  16. //引导图片资源
  17. private static final int[] pics = { R.drawable.whatsnew_00,
  18. R.drawable.whatsnew_01, R.drawable.whatsnew_02,
  19. R.drawable.whatsnew_03 };
  20. //底部小店图片
  21. private ImageView[] dots ;
  22. //记录当前选中位置
  23. private int currentIndex;
  24. /** Called when the activity is first created. */
  25. @Override
  26. public void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.main);
  29. views = new ArrayList<View>();
  30. LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
  31. LinearLayout.LayoutParams.WRAP_CONTENT);
  32. //初始化引导图片列表
  33. for(int i=0; i<pics.length; i++) {
  34. ImageView iv = new ImageView(this);
  35. iv.setLayoutParams(mParams);
  36. iv.setImageResource(pics[i]);
  37. views.add(iv);
  38. }
  39. vp = (ViewPager) findViewById(R.id.viewpager);
  40. //初始化Adapter
  41. vpAdapter = new ViewPagerAdapter(views);
  42. vp.setAdapter(vpAdapter);
  43. //绑定回调
  44. vp.setOnPageChangeListener(this);
  45. //初始化底部小点
  46. initDots();
  47. }
  48. private void initDots() {
  49. LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
  50. dots = new ImageView[pics.length];
  51. //循环取得小点图片
  52. for (int i = 0; i < pics.length; i++) {
  53. dots[i] = (ImageView) ll.getChildAt(i);
  54. dots[i].setEnabled(true);//都设为灰色
  55. dots[i].setOnClickListener(this);
  56. dots[i].setTag(i);//设置位置tag,方便取出与当前位置对应
  57. }
  58. currentIndex = 0;
  59. dots[currentIndex].setEnabled(false);//设置为白色,即选中状态
  60. }
  61. /**
  62. *设置当前的引导页
  63. */
  64. private void setCurView(int position)
  65. {
  66. if (position < 0 || position >= pics.length) {
  67. return;
  68. }
  69. vp.setCurrentItem(position);
  70. }
  71. /**
  72. *这只当前引导小点的选中
  73. */
  74. private void setCurDot(int positon)
  75. {
  76. if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {
  77. return;
  78. }
  79. dots[positon].setEnabled(false);
  80. dots[currentIndex].setEnabled(true);
  81. currentIndex = positon;
  82. }
  83. //当滑动状态改变时调用
  84. @Override
  85. public void onPageScrollStateChanged(int arg0) {
  86. // TODO Auto-generated method stub
  87. }
  88. //当当前页面被滑动时调用
  89. @Override
  90. public void onPageScrolled(int arg0, float arg1, int arg2) {
  91. // TODO Auto-generated method stub
  92. }
  93. //当新的页面被选中时调用
  94. @Override
  95. public void onPageSelected(int arg0) {
  96. //设置底部小点选中状态
  97. setCurDot(arg0);
  98. }
  99. @Override
  100. public void onClick(View v) {
  101. int position = (Integer)v.getTag();
  102. setCurView(position);
  103. setCurDot(position);
  104. }
  105. }

注意实现OnClickListener, OnPageChangeListener接口,监听小点的点击事件以及viewPager的滑动,在相应的回调方法中设置小点的enable状态,我相信这个部分代码比我讲的清楚,就是判断当前选中的位置对相应的小点进行设置~

可以看到ViewPager还是一个非常简单,也非常实用的一个控件。

有问题欢迎留言交流。

http://blog.csdn.net/notice520/article/details/7454568/

android UI进阶之用ViewPager实现欢迎引导页面的更多相关文章

  1. android UI进阶之用ViewPager实现欢迎引导页面[转]

    ViewPager需要android-support-v4.jar这个包的支持,来自google提供的一个附加包.大家搜下即可. ViewPager主要用来组织一组数据,并且通过左右滑动的方式来展示. ...

  2. android UI进阶之用【转】

    android UI进阶之用ViewPager实现欢迎引导页面 摘要: ViewPager需要android-support-v4.jar这个包的支持,来自google提供的一个附加包.大家搜下即可. ...

  3. 【Android 复习】:第02期:引导界面(二)使用ViewPager实现欢迎引导页面

    一.实现的效果图 也许是养成了这样一个习惯,每次看别人的代码前,必须要先看实现的效果图达到了一个什么样的效果,是不是跟自己想要实现的效果类似,有图才有真相嘛,呵呵.           二.编码前的准 ...

  4. ViewPager实现启动引导页面(个人认为很详细)

    效果如图: 启动页面是一张图片+延时效果,这里就不给出布局文件了. WelcomeActivity分析:在启动页面检测是否是第一次运行程序,如果是,则先跳转到引导界面的Activity——AndyVi ...

  5. 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面

    本系列文章都会以一个程序的实例开发为主线来进行讲解,以求达到一个循序渐进的学习效果,这样更能加深大家对于程序为什么要这样写的用意,理论加上实际的应用才能达到事半功倍的效果,不是吗? 最下方有源码的下载 ...

  6. 【Android UI设计与开发】2.引导界面(二)使用ViewPager实现欢迎引导页面

    1.实现的效果 2.编码前的准备工作 ViewPager是Android3.0之后提供的新特性,所以要想让你的应用向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自 ...

  7. 【转】android UI进阶之自定义组合控件

    [源地址]http://blog.csdn.net/notice520/article/details/6667827 好久没写博客了.实在是忙不过来,不过再不总结总结真的不行了.慢慢来吧,有好多需要 ...

  8. android UI进阶之style和theme的使用

    今天来和大家分享一下android中UI设计里面常会用到的style和theme. 首先,style和theme都是资源,android提供了很多这样的默认资源.你可以来使用它们.同时你也可以自己定义 ...

  9. 【Android UI设计与开发】使用ViewPager实现欢迎引导页面

    一.实现的效果图 每次看别人的代码前,必需要先看实现的效果图达到了一个什么样的效果,是不是跟自己想要实现的效果类似.有图才有真相嘛,同一时候,最下方有源代码的下载地址,差点儿源代码的每一行都有凝视,写 ...

随机推荐

  1. T-SQL DBMS

    dbo 默认架构schema 从一个数据库操作另个数据库的表的时候,要select * from 数据库.dbo.biao           表名前面的dbo是一个默认架构schema,一个架构还有 ...

  2. python 使用多线程进行压力测试

    #coding=utf-8 import urllib2 import threading import time TOTAL = 0 #总数 SUCC = 0 #响应成功数 FAIL = 0 #响应 ...

  3. PHP-FPM + Nginx: 502错误

    /etc/php5/fpm/pool.d/www.conf 里面找到这样一段代码: listen = 127.0.0.1:9000 在这上面代码的下面添加一行: listen = /var/run/p ...

  4. RT-Thread 线程的让出

    前面两个例子演示的线程调度是由系统“主动干预”的情况的线程切换,其实我们也可以根据实际情况,采用主动让出 CPU 使用权.RT-Thread 中的系统函数: rt_thread_yield(),可以让 ...

  5. java--字符串替换replace,replaceAll,replaceFirst

    1.字符串替换,replace string s="abcdfersabcdsgacabc"; 将字符串中的abc替换成bdf s.replace("abc", ...

  6. Windows注册表(持续更新)

    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Zoom 下, 设置DWORD 值 ZoomDisabled  等于 1.

  7. nodejs fs 模块

    件系统操作相关的函数挺多的.首先可以分为两大类. 一类是异步+回调的. 一类是同步的. 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1. 首先是一类最常规的读写函数,函数名称 ...

  8. 图形显示之RGB

    记得初中学数学几何时,有这样一句话:点运动成线,线运动成面,面运动成体. 其它方面也有相似的原理. 例如常见的gif动态图,就是由一帧一帧的图片快速切换得到的.那么,图片又是怎么显示的呢? 一副图片是 ...

  9. There is no tracking information for the current branch

    There is no tracking information for the current branch. Please specify which branch you want to mer ...

  10. 设计模式:简单工厂(Simple Factory)

    定义:根据提供的数据或参数返回几种可能类中的一种. 示例:实现计算器功能,要求输入两个数和运算符号,得到结果. 结构图: HTML: <html xmlns="http://www.w ...