国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android ViewPager實(shí)現(xiàn)無限循環(huán)的實(shí)例

2019-12-12 02:28:56
字體:
供稿:網(wǎng)友

Android ViewPager實(shí)現(xiàn)無限循環(huán)的實(shí)例

ViewPager自身并不支持左右無限循環(huán)的功能,這里就提供一種方案讓Android ViewPager實(shí)現(xiàn)左右無限循環(huán)的功能,這里記錄下:

用于顯示的mViews,比數(shù)據(jù)源mList,多了兩個節(jié)點(diǎn)元素(頭節(jié)點(diǎn)0:b和尾節(jié)點(diǎn)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是否等于進(jìn)來的view 如果為true直接復(fù)用        */       @Override       public boolean isViewFromObject(View arg0, Object arg1) {         return arg0 == arg1;       }        /**        * 銷毀預(yù)加載以外的view對象, 會把需要銷毀的對象的索引位置傳進(jìn)來就是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)的時(shí)候過渡效果會很不自然。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泾源县| 娱乐| 凤山县| 盘锦市| 通许县| 大埔区| 博乐市| 庆城县| 庆云县| 赤壁市| 漠河县| 增城市| 宜兰市| 丹凤县| 佛冈县| 大竹县| 蓝田县| 民乐县| 娱乐| 沂源县| 东乡| 平远县| 上杭县| 明水县| 临澧县| 承德县| 赞皇县| 马关县| 乌拉特前旗| 九江县| 陕西省| 礼泉县| 蚌埠市| 阿瓦提县| 瑞昌市| 建湖县| 眉山市| 原阳县| 章丘市| 四平市| 嘉定区|