歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android中如何使用ViewPager實現類似laucher左右拖動效果

Android中如何使用ViewPager實現類似laucher左右拖動效果

日期:2017/3/1 10:24:06   编辑:Linux編程
現在很多Android應用在首次安裝完都會有指引如何使用該應用的某些功能的指引界面,這樣會獲得很好的用戶體驗,能夠幫助用戶更好使用應用的某些功能。其實該功能和Android主界面的 luncher 的功能完全一樣的效果,可以實現左右拖動。

下面結合 ViewPager 的實例來展示如何實現該功能,先看下該Demo的結構圖:


注: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. }
運行上面的程序,效果截圖如下:


至此大功告成,已經采用ViewPager組件實現了左右滑動(拖動)效果。本文為[Andy.Chen]原創,轉載請注明出處,謝謝。

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/4月/23日/Android中如何使用ViewPager實現類似laucher左右拖動效果/

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved