歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android教程:使用ViewPager實現左右循環滑動

Android教程:使用ViewPager實現左右循環滑動

日期:2017/3/1 10:22:52   编辑:Linux編程

前面一篇文章實現了使用ViewPager實現高仿launcher拖動效果 ,後來很多朋友問能不能實現左右循環滑動效果和引導頁面。今天實現了左右滑動,至於在最後一頁滑動跳轉,這個也做了但是效果不是太好,也希望有實現的朋友能夠分享下。在最後一頁添加一張圖片單擊跳轉,這個認為很簡單大家自己添加個圖片,點擊後跳轉就OK。

這篇是在實現了使用ViewPager實現高仿launcher拖動效果的基礎上做了一些小的修改,可以參照前面的。廢話不多說了,直接上代碼吧!

首先看一些layout下的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/viewPager"
  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>

和前面一頁使用viewpager。使用ViewPager首先需要引入android-support-v4.jar這個jar包。自己不要忘記加。

下面是核心代碼:

  1. package cn.com.karl.viewpager;
  2. import java.util.ArrayList;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.os.Parcelable;
  7. import android.support.v4.view.PagerAdapter;
  8. import android.support.v4.view.ViewPager;
  9. import android.support.v4.view.ViewPager.OnPageChangeListener;
  10. import android.util.Log;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.view.ViewGroup.LayoutParams;
  15. import android.view.Window;
  16. import android.widget.ImageView;
  17. public class MainActivity extends Activity {
  18. ViewPager viewPager;
  19. ArrayList<View> list;
  20. ViewGroup main, group;
  21. ImageView imageView;
  22. ImageView[] imageViews;
  23. private static int c_id = 0;
  24. @Override
  25. public void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  28. LayoutInflater inflater = getLayoutInflater();
  29. list = new ArrayList<View>();
  30. list.add(inflater.inflate(R.layout.item1, null));
  31. list.add(inflater.inflate(R.layout.item2, null));
  32. list.add(inflater.inflate(R.layout.item3, null));
  33. list.add(inflater.inflate(R.layout.item4, null));
  34. list.add(inflater.inflate(R.layout.item5, null));
  35. imageViews = new ImageView[list.size()];
  36. ViewGroup main = (ViewGroup) inflater.inflate(R.layout.main, null);
  37. ViewGroup group = (ViewGroup) main.findViewById(R.id.viewGroup);
  38. viewPager = (ViewPager) main.findViewById(R.id.viewPager);
  39. for (int i = 0; i < list.size(); i++) {
  40. imageView = new ImageView(MainActivity.this);
  41. imageView.setLayoutParams(new LayoutParams(12,12));
  42. //imageView.setPadding(10, 0, 10, 0);
  43. imageViews[i] = imageView;
  44. if (i == 0) {
  45. imageViews[i].setBackgroundResource(R.drawable.guide_dot_white);
  46. } else {
  47. imageViews[i].setBackgroundResource(R.drawable.guide_dot_black);
  48. }
  49. group.addView(imageView);
  50. }
  51. setContentView(main);
  52. viewPager.setAdapter(new MyAdapter());
  53. viewPager.setOnPageChangeListener(new MyListener());
  54. viewPager.setCurrentItem(300);
  55. }
  56. class MyAdapter extends PagerAdapter {
  57. @Override
  58. public int getCount() {
  59. return Integer.MAX_VALUE;
  60. }
  61. @Override
  62. public boolean isViewFromObject(View arg0, Object arg1) {
  63. return arg0 == arg1;
  64. }
  65. @Override
  66. public int getItemPosition(Object object) {
  67. // TODO Auto-generated method stub
  68. return super.getItemPosition(object);
  69. }
  70. @Override
  71. public void destroyItem(View arg0, int arg1, Object arg2) {
  72. // TODO Auto-generated method stub
  73. //((ViewPager) arg0).removeView(list.get(arg1));
  74. }
  75. @Override
  76. public Object instantiateItem(View arg0, int arg1) {
  77. // TODO Auto-generated method stub
  78. try{
  79. ((ViewPager) arg0).addView(list.get(arg1%list.size()),0);
  80. }catch (Exception e) {
  81. // TODO: handle exception
  82. }
  83. return list.get(arg1%list.size());
  84. }
  85. @Override
  86. public void restoreState(Parcelable arg0, ClassLoader arg1) {
  87. // TODO Auto-generated method stub
  88. }
  89. @Override
  90. public Parcelable saveState() {
  91. // TODO Auto-generated method stub
  92. return null;
  93. }
  94. @Override
  95. public void startUpdate(View arg0) {
  96. // TODO Auto-generated method stub
  97. }
  98. @Override
  99. public void finishUpdate(View arg0) {
  100. // TODO Auto-generated method stub
  101. }
  102. }
  103. class MyListener implements OnPageChangeListener {
  104. //當滑動狀態改變時調用
  105. @Override
  106. public void onPageScrollStateChanged(int arg0) {
  107. // TODO Auto-generated method stub
  108. //arg0=arg0%list.size();
  109. }
  110. //當當前頁面被滑動時調用
  111. @Override
  112. public void onPageScrolled(int arg0, float arg1, int arg2) {
  113. // TODO Auto-generated method stub
  114. }
  115. //當新的頁面被選中時調用
  116. @Override
  117. public void onPageSelected(int arg0) {
  118. if(arg0>2){
  119. arg0=arg0%list.size();
  120. }
  121. c_id = arg0;
  122. for (int i = 0; i < imageViews.length; i++) {
  123. imageViews[arg0]
  124. .setBackgroundResource(R.drawable.guide_dot_white);
  125. if (arg0 != i) {
  126. imageViews[i]
  127. .setBackgroundResource(R.drawable.guide_dot_black);
  128. }
  129. }
  130. Log.e("-------------", "當前是第"+c_id+"頁");
  131. }
  132. }
  133. }

代碼跟上一篇差不多,大家自己研究吧!下面看下效果:


忘記了,這種效果不太好用圖片演示,大家自己演示吧!滑動到最後一張,再滑動就是進入了第一頁。下面看下我logcat下的打印:


這裡默認是從第0頁開始的。

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

Copyright © Linux教程網 All Rights Reserved