歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

前面一篇文章實現了使用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.   
  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包。自己不要忘記加。

下面是核心代碼:

  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. }  

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


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

   

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

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

Copyright © Linux教程網 All Rights Reserved