Android 使用ViewPager真正實現左右無限滑動(附源碼)

來源:互聯網
上載者:User

標籤:

前言
        網上有很多使用ViewPager實現左右滑動這一效果的資料,這些資料大多數都是將PagerAdapter中getCount()方法的返回值設為Integer.MAX_VALUE使使用者看不到邊界,然後在instantiateItem()方法中通過position%(要迴圈顯示的資料集的長度)的方式取得對應的資料集。這樣雖然可以做到無限迴圈,但是會有兩個弊端:首先會建立大量對象,容易引起記憶體溢出(迴圈載入圖片)從而影響效能;其次從第一頁向右滑動的時候是無法滑動的。       今天給大家分享的是另一種實現方式:建立三個圖片視圖放入ViewPager中預設選中第二頁,在接下來的滑動中每次滑動結束之後都將當前頁碼設定為第二頁,然後通過判斷是向左向右滑動來設定視圖中的資料集,這樣就可以實現無限迴圈了,而且只會建立三個圖片視圖對象。
樣本源碼
package com.viewpager;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.app.Activity;public class MainActivity01 extends Activity implements OnPageChangeListener {private ViewPager viewPager;static final int arrays[] = { R.drawable.guide1, R.drawable.guide2,R.drawable.guide3, R.drawable.guide4, R.drawable.guide5 };private List<ImageView> views;private int currentPage = 0;private ImageView imageView;private MyViewPagerAdapter viewPagerAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initWidget();}private void initWidget() {viewPager = (ViewPager) findViewById(R.id.viewpager);views = new ArrayList<ImageView>();for (int i = 0; i < 3; i++) {imageView = new ImageView(this);imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));views.add(imageView);}initImageData();viewPagerAdapter = new MyViewPagerAdapter();viewPager.setAdapter(viewPagerAdapter);viewPager.setCurrentItem(1);viewPager.setOnPageChangeListener(this);}private void initImageData() {for (int i = 0; i < 3; i++) {imageView = views.get(i);if (i == 0) {imageView.setImageResource(arrays[arrays.length - 1]);} else {imageView.setImageResource(arrays[i - 1]);}}}class MyViewPagerAdapter extends PagerAdapter {@Overridepublic int getCount() {// TODO Auto-generated method stubreturn views.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {// TODO Auto-generated method stubreturn arg0 == arg1;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {imageView = views.get(position);container.addView(imageView);return imageView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// TODO Auto-generated method stubcontainer.removeView((View) object);}}// 當滑動狀態改變時調用@Overridepublic void onPageScrollStateChanged(int state) {// TODO Auto-generated method stubSystem.out.println("--onPageScrollStateChanged--state--:" + state);switch (state) {// 在滾動完成後case ViewPager.SCROLL_STATE_IDLE:int currentItem = viewPager.getCurrentItem();System.out.println("--currentItem--00--:" + currentItem);System.out.println("--currentPage--00--:" + currentPage);if (viewPager.getCurrentItem() == 1) {// 如果位置沒有變終止迴圈break;}if (viewPager.getCurrentItem() > 1) {currentPage++;} else {currentPage--;}System.out.println("--currentPage--11--:" + currentPage);if (currentPage == arrays.length) {currentPage = 0;}if (currentPage == -1) {currentPage = arrays.length - 1;}System.out.println("--currentPage--22--:" + currentPage);if (currentPage == 0) {views.get(0).setImageResource(arrays[arrays.length - 1]);} else {views.get(0).setImageResource(arrays[currentPage - 1]);}views.get(1).setImageResource(arrays[currentPage]);if (currentPage == arrays.length - 1) {views.get(2).setImageResource(arrays[0]);} else {views.get(2).setImageResource(arrays[currentPage + 1]);}viewPager.setCurrentItem(1, false);currentItem = viewPager.getCurrentItem();System.out.println("--currentItem--11--:" + currentItem);break;}}// 噹噹前頁面被滑動時調用@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {// TODO Auto-generated method stub// System.out.println("--onPageScrolled--position--:" + position);}// 當新的頁面被選中時調用@Overridepublic void onPageSelected(int position) {// TODO Auto-generated method stubSystem.out.println("--onPageSelected--position--:" + position);}}


Android 使用ViewPager真正實現左右無限滑動(附源碼)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.