使用ViewPager实现左右循环滑动

时间:2024-04-05 09:58:28

 

  前面一篇文章实现了使用ViewPager实现高仿launcher拖动效果 ,后来很多朋友问能不能实现左右循环滑动效果和引导页面。今天实现了左右滑动,至于在最后一页滑动跳转,这个也做了但是效果不是太好,也希望有实现的朋友能够分享下。在最后一页添加一张图片单击跳转,这个认为很简单大家自己添加个图片,点击后跳转就OK。

           这篇是在实现了使用ViewPager实现高仿launcher拖动效果的基础上做了一些小的修改,可以参照前面的。废话不多说了,直接上代码吧!

          首先看一些layout下的xml

 

[html] view plaincopy
  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.   
  7.     <android.support.v4.view.ViewPager  
  8.         android:id="@+id/viewPager"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content" />  
  11.   
  12.     <RelativeLayout  
  13.         android:layout_width="fill_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:orientation="vertical" >  
  16.   
  17.         <LinearLayout  
  18.             android:id="@+id/viewGroup"  
  19.             android:layout_width="fill_parent"  
  20.             android:layout_height="wrap_content"  
  21.             android:layout_alignParentBottom="true"  
  22.             android:layout_marginBottom="30dp"  
  23.             android:gravity="center_horizontal"  
  24.             android:orientation="horizontal" >  
  25.         </LinearLayout>  
  26.     </RelativeLayout>  
  27.   
  28. </FrameLayout>  

和前面一页使用viewpager。使用ViewPager首先需要引入android-support-v4.jar这个jar包。自己不要忘记加。

 

  下面是核心代码:

  

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

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

 

使用ViewPager实现左右循环滑动

       忘记了,这种效果不太好用图片演示,大家自己演示吧!滑动到最后一张,再滑动就是进入了第一页。下面看下我logcat下的打印:

    使用ViewPager实现左右循环滑动

     这里默认是从第0页开始的。