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

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

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

2019-10-22 18:32:23
字體:
供稿:網(wǎng)友

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

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

用于顯示的mViews,比數(shù)據(jù)源mList,多了兩個(gè)節(jié)點(diǎn)元素(頭節(jié)點(diǎn)0:b和尾節(jié)點(diǎn)5:e用于跳轉(zhuǎn))

下圖的不帶箭頭的紅線,是mViews根據(jù)mList初始化的情況;帶箭頭的紅線是跳轉(zhuǎn)的情況。

Android,ViewPager實(shí)現(xiàn)無限循環(huán),ViewPager循環(huá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="第一個(gè)引導(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對(duì)象, 會(huì)把需要銷毀的對(duì)象的索引位置傳進(jìn)來就是position        */       @Override       public void destroyItem(ViewGroup container, int position, Object object) {         container.removeView(imageViewList.get(position));       }        /**        * 創(chuàng)建一個(gè)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ì)循環(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)過程的動(dòng)畫           position = 1;         }       }       }    @Override   protected void onDestroy() {     super.onDestroy();   }  } 
mViewPager.setCurrentItem(1,false); //false:不顯示跳轉(zhuǎn)過程的動(dòng)畫 

上面的代碼只是一個(gè)簡(jiǎn)單的Demo,如果不將跳轉(zhuǎn)動(dòng)畫去掉的話,首尾頁跳轉(zhuǎn)的時(shí)候過渡效果會(huì)很不自然。

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新竹市| 洪洞县| 济南市| 杨浦区| 锡林浩特市| 蒲城县| 甘泉县| 新泰市| 巴中市| 万盛区| 罗田县| 穆棱市| 焉耆| 应城市| 自治县| 香港 | 资源县| 宿州市| 永德县| 石嘴山市| 平顶山市| 香格里拉县| 鄢陵县| 罗田县| 三门峡市| 绥阳县| 新乐市| 太仓市| 周宁县| 垦利县| 沛县| 新兴县| 灵台县| 蛟河市| 田林县| 胶州市| 临桂县| 铜川市| 茌平县| 武鸣县| 武宁县|