Android中如何使用ViewPager实现类似laucher左右拖动效果

 现在很多Android应用在首次安装完都会有指引如何使用该应用的某些功能的指引界面,这样会获得很好的用户体验,能够帮助用户更好使用应用的某些功能。其实该功能和Android主界面的 luncher 的功能完全一样的效果,可以实现左右拖动。

下面结合 ViewPager 的实例来展示如何实现该功能,先看下该Demo的结构图:

1333201730_7908.png

2012-4-1 10:23 上传
下载附件 (16.26 KB)

注:ViewPager类是实现左右两个屏幕平滑地切换的一个类,是由Google 提供的, 使用ViewPager首先需要引入android-support-v4.jar这个jar包。其中工程项目中的 libs 文件夹下存放着 android-support-v4.jar这个jar包。drawable文件夹下包含有图片资源文件。

以下是工程中各个文件的源码:


main.xml源码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout 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/guidePages"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"/>

  10. <RelativeLayout
  11. android:layout_width="fill_parent"
  12. android:layout_height="wrap_content"
  13. android:orientation="vertical" >
  14. <LinearLayout
  15. android:id="@+id/viewGroup"
  16. android:layout_width="fill_parent"
  17. android:layout_height="wrap_content"
  18. android:layout_alignParentBottom="true"
  19. android:layout_marginBottom="30dp"
  20. android:gravity="center_horizontal"
  21. android:orientation="horizontal" >
  22. </LinearLayout>
  23. </RelativeLayout>

  24. </FrameLayout>
复制代码
item01.xml源码:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout 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. <ImageView
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent"
  9. android:background="@drawable/feature_guide_0" >
  10. </ImageView>

  11. </LinearLayout>
复制代码
其中item02.xml,item03.xml,item04.xml布局文件的源码和item01.xml布局文件一样,只是 ImageView 中的 android:background 属性的背景图片不同而已。GuideViewDemoActivity.java 源码:
  1. package com.andyidea.guidedemo;

  2. import java.util.ArrayList;

  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.os.Parcelable;
  6. import android.support.v4.view.PagerAdapter;
  7. import android.support.v4.view.ViewPager;
  8. import android.support.v4.view.ViewPager.OnPageChangeListener;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.view.ViewGroup.LayoutParams;
  13. import android.view.Window;
  14. import android.widget.ImageView;

  15. public class GuideViewDemoActivity extends Activity {

  16. private ViewPager viewPager;
  17. private ArrayList<View> pageViews;
  18. private ViewGroup main, group;
  19. private ImageView imageView;
  20. private ImageView[] imageViews;

  21. /** Called when the activity is first created. */
  22. @Override
  23. public void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. this.requestWindowFeature(Window.FEATURE_NO_TITLE);

  26. LayoutInflater inflater = getLayoutInflater();
  27. pageViews = new ArrayList<View>();
  28. pageViews.add(inflater.inflate(R.layout.item01, null));
  29. pageViews.add(inflater.inflate(R.layout.item02, null));
  30. pageViews.add(inflater.inflate(R.layout.item03, null));
  31. pageViews.add(inflater.inflate(R.layout.item04, null));

  32. imageViews = new ImageView[pageViews.size()];
  33. main = (ViewGroup)inflater.inflate(R.layout.main, null);

  34. // group是R.layou.main中的负责包裹小圆点的LinearLayout.
  35. group = (ViewGroup)main.findViewById(R.id.viewGroup);

  36. viewPager = (ViewPager)main.findViewById(R.id.guidePages);

  37. for (int i = 0; i < pageViews.size(); i++) {
  38. imageView = new ImageView(GuideViewDemoActivity.this);
  39. imageView.setLayoutParams(new LayoutParams(20,20));
  40. imageView.setPadding(20, 0, 20, 0);
  41. imageViews[i] = imageView;
  42. if (i == 0) {
  43. //默认选中第一张图片
  44. imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);
  45. } else {
  46. imageViews[i].setBackgroundResource(R.drawable.page_indicator);
  47. }
  48. group.addView(imageViews[i]);
  49. }

  50. setContentView(main);

  51. viewPager.setAdapter(new GuidePageAdapter());
  52. viewPager.setOnPageChangeListener(new GuidePageChangeListener());
  53. }

  54. /** 指引页面Adapter */
  55. class GuidePageAdapter extends PagerAdapter {

  56. @Override
  57. public int getCount() {
  58. return pageViews.size();
  59. }

  60. @Override
  61. public boolean isViewFromObject(View arg0, Object arg1) {
  62. return arg0 == arg1;
  63. }

  64. @Override
  65. public int getItemPosition(Object object) {
  66. // TODO Auto-generated method stub
  67. return super.getItemPosition(object);
  68. }

  69. @Override
  70. public void destroyItem(View arg0, int arg1, Object arg2) {
  71. // TODO Auto-generated method stub
  72. ((ViewPager) arg0).removeView(pageViews.get(arg1));
  73. }

  74. @Override
  75. public Object instantiateItem(View arg0, int arg1) {
  76. // TODO Auto-generated method stub
  77. ((ViewPager) arg0).addView(pageViews.get(arg1));
  78. return pageViews.get(arg1);
  79. }

  80. @Override
  81. public void restoreState(Parcelable arg0, ClassLoader arg1) {
  82. // TODO Auto-generated method stub

  83. }

  84. @Override
  85. public Parcelable saveState() {
  86. // TODO Auto-generated method stub
  87. return null;
  88. }

  89. @Override
  90. public void startUpdate(View arg0) {
  91. // TODO Auto-generated method stub

  92. }

  93. @Override
  94. public void finishUpdate(View arg0) {
  95. // TODO Auto-generated method stub

  96. }
  97. }

  98. /** 指引页面改监听器 */
  99. class GuidePageChangeListener implements OnPageChangeListener {

  100. @Override
  101. public void onPageScrollStateChanged(int arg0) {
  102. // TODO Auto-generated method stub

  103. }

  104. @Override
  105. public void onPageScrolled(int arg0, float arg1, int arg2) {
  106. // TODO Auto-generated method stub

  107. }

  108. @Override
  109. public void onPageSelected(int arg0) {
  110. for (int i = 0; i < imageViews.length; i++) {
  111. imageViews[arg0]
  112. .setBackgroundResource(R.drawable.page_indicator_focused);
  113. if (arg0 != i) {
  114. imageViews[i]
  115. .setBackgroundResource(R.drawable.page_indicator);
  116. }
  117. }

  118. }

  119. }

  120. }
复制代码
运行上面的程序,效果截图如下:
1333203180_1327.png
2012-4-1 10:26 上传
下载附件 (40.7 KB)
1333203194_3243.png
2012-4-1 10:26 上传
下载附件 (41.42 KB)
1333203204_8186.png
2012-4-1 10:26 上传
下载附件 (49.12 KB)
1333203209_8211.png
2012-4-1 10:26 上传
下载附件 (35.7 KB)

至此大功告成,已经采用ViewPager组件实现了左右滑动(拖动)效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值