Android ViewPager實現(xiàn)無限循環(huán)的實例
Android ViewPager實現(xiàn)無限循環(huán)的實例
ViewPager自身并不支持左右無限循環(huán)的功能,這里就提供一種方案讓Android ViewPager實現(xiàn)左右無限循環(huán)的功能,這里記錄下:
用于顯示的mViews,比數(shù)據(jù)源mList,多了兩個節(jié)點元素(頭節(jié)點0:b和尾節(jié)點5:e用于跳轉(zhuǎn))
下圖的不帶箭頭的紅線,是mViews根據(jù)mList初始化的情況;帶箭頭的紅線是跳轉(zhuǎn)的情況。
首先還是布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" > </android.support.v4.view.ViewPager> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBottom="@id/viewpager" android:background="#33000000" android:orientation="vertical" android:padding="5dip" > <TextView android:id="@+id/tv_image_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="第一個引導(dǎo)頁面" android:textColor="@android:color/white" android:textSize="14sp" /> <LinearLayout android:id="@+id/ll_points" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dip" android:layout_gravity="center_horizontal" android:orientation="horizontal" > </LinearLayout> </LinearLayout> </RelativeLayout>
接下來是MainActivity:
package com.example.viewpagertest; import java.util.ArrayList; import java.util.List; import android.app.Activity; 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; public class MainActivity extends Activity implements OnPageChangeListener { private List<ImageView> imageViewList; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setView(); initView(); } public void setView() { setContentView(R.layout.activity_splash_viewpager); } public void initView() { mViewPager = (ViewPager) findViewById(R.id.viewpager); prepareData(); ViewPagerAdapter adapter = new ViewPagerAdapter(); mViewPager.setAdapter(adapter); mViewPager.setOnPageChangeListener(this); } private void prepareData() { imageViewList = new ArrayList<ImageView>(); int[] imageResIDs = getImageResIDs(); ImageView iv; for (int i = 0; i < imageResIDs.length; i++) { iv = new ImageView(this); iv.setBackgroundResource(imageResIDs[i]); imageViewList.add(iv); } } /** * 在此處本來是5張圖片,現(xiàn)在在數(shù)組首尾各加了一張圖 * @return */ private int[] getImageResIDs() { return new int[]{ R.drawable.pic_02, R.drawable.bg1, R.drawable.bg2, R.drawable.bg3, R.drawable.pic_01, R.drawable.pic_02, R.drawable.bg1, }; } class ViewPagerAdapter extends PagerAdapter { @Override public int getCount() { return imageViewList.size(); } /** * 判斷出去的view是否等于進來的view 如果為true直接復(fù)用 */ @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } /** * 銷毀預(yù)加載以外的view對象, 會把需要銷毀的對象的索引位置傳進來就是position */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(imageViewList.get(position)); } /** * 創(chuàng)建一個view */ @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(imageViewList.get(position)); return imageViewList.get(position); } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { if ( imageViewList.size() > 1) { //多于1,才會循環(huán)跳轉(zhuǎn) if ( position < 1) { //首位之前,跳轉(zhuǎn)到末尾(N) position = 5; mViewPager.setCurrentItem(position,false); } else if ( position > 5) { //末位之后,跳轉(zhuǎn)到首位(1) mViewPager.setCurrentItem(1,false); //false:不顯示跳轉(zhuǎn)過程的動畫 position = 1; } } } @Override protected void onDestroy() { super.onDestroy(); } }
mViewPager.setCurrentItem(1,false); //false:不顯示跳轉(zhuǎn)過程的動畫
上面的代碼只是一個簡單的Demo,如果不將跳轉(zhuǎn)動畫去掉的話,首尾頁跳轉(zhuǎn)的時候過渡效果會很不自然。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- Android實現(xiàn)ViewPager無限循環(huán)效果(二)
- Android ViewPager無限循環(huán)滑動并可自動滾動完整實例
- Android ViewPager導(dǎo)航小圓點實現(xiàn)無限循環(huán)效果
- Android ViewPager實現(xiàn)無限循環(huán)輪播廣告位Banner效果
- Android ViewPager實現(xiàn)智能無限循環(huán)滾動回繞效果
- Android實現(xiàn)基于ViewPager的無限循環(huán)自動播放帶指示器的輪播圖CarouselFigureView控件
- Android ViewPager無限循環(huán)實現(xiàn)底部小圓點動態(tài)滑動
- Android ViewPager實現(xiàn)無限循環(huán)效果
- Android viewpager中動態(tài)添加view并實現(xiàn)偽無限循環(huán)的方法
- Android實現(xiàn)ViewPager無限循環(huán)效果(一)
相關(guān)文章
Android下通過httpClient發(fā)送GET和POST請求的實例代碼
這篇文章介紹了Android下通過httpClient發(fā)送GET和POST請求的實例代碼,有需要的朋友可以參考一下2013-08-08Android使用TabLayout+Fragment實現(xiàn)頂部選項卡
本文通過實例代碼給大家介紹了Android使用TabLayout+Fragment實現(xiàn)頂部選項卡功能,包括TabLyout的使用,感興趣的朋友參考下本文吧2017-05-05Android 使用Vitamio打造自己的萬能播放器(1)——準(zhǔn)備
本文主要介紹Android Vitamio,在Android開發(fā)視頻播放器的時候,大家經(jīng)常會遇到系統(tǒng)版本和不同的Android手機不同導(dǎo)致開發(fā)的軟件不能完美適用,這里給大家介紹個播放器插件可以適應(yīng)所有Android設(shè)備2016-07-07Android中編寫簡單的手電筒小應(yīng)用的實例教程
這篇文章主要介紹了Android中編寫簡單的手電筒小應(yīng)用的實例教程,簡單粗暴地控制手機閃光燈的開閉,效果拔群XD 需要的朋友可以參考下2016-04-04Android7.0開發(fā)實現(xiàn)Launcher3去掉應(yīng)用抽屜的方法詳解
這篇文章主要介紹了Android7.0開發(fā)實現(xiàn)Launcher3去掉應(yīng)用抽屜的方法,結(jié)合實例形式分析了Android7.0 Launcher3調(diào)整界面布局的相關(guān)操作技巧與注意事項,需要的朋友可以參考下2017-11-11Android Walker登錄記住密碼頁面功能實現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android Walker登錄記住密碼頁面功能的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05Android NavigationView頭部設(shè)置監(jiān)聽事件
這篇文章主要為大家詳細(xì)介紹了Android NavigationView頭部設(shè)置監(jiān)聽事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10