自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ViewPager實(shí)現(xiàn)輪播廣告圖

移動(dòng)開(kāi)發(fā) Android
輪播廣告在現(xiàn)在的應(yīng)用中比較常見(jiàn),下面就來(lái)實(shí)現(xiàn)下該功能(文章參考了網(wǎng)上流傳的黑馬的視頻教程)先來(lái)看下具體的實(shí)現(xiàn)效果。首先需要說(shuō)明的就是在這篇文章里并沒(méi)有同時(shí)實(shí)現(xiàn)左右循環(huán)滑動(dòng)和手指觸碰自動(dòng)停止的功能,這個(gè)問(wèn)題還沒(méi)有解決,留待以后再解決,也希望有知道的朋友在下面留言。

[[177558]]

輪播廣告在現(xiàn)在的應(yīng)用中比較常見(jiàn),下面就來(lái)實(shí)現(xiàn)下該功能(文章參考了網(wǎng)上流傳的黑馬的視頻教程)先來(lái)看下具體的實(shí)現(xiàn)效果:  

 

實(shí)現(xiàn)思路:

1.為ViewPager設(shè)置數(shù)據(jù)源,實(shí)現(xiàn)ViewPager的滾動(dòng)

2.將圓點(diǎn)指示器與ViewPager的頁(yè)面對(duì)應(yīng)起來(lái)

3.實(shí)現(xiàn)左右滑動(dòng)均能無(wú)限循環(huán)

4.實(shí)現(xiàn)自動(dòng)播放

5.實(shí)現(xiàn)當(dāng)手指滑動(dòng)的時(shí)候取消自動(dòng)播發(fā)

首先需要說(shuō)明的就是在這篇文章里并沒(méi)有同時(shí)實(shí)現(xiàn)左右循環(huán)滑動(dòng)和手指觸碰自動(dòng)停止的功能,這個(gè)問(wèn)題還沒(méi)有解決,留待以后再解決,也希望有知道的朋友在下面留言,先謝謝拉。

1.首先我們定義布局文件,用來(lái)顯示Banner

這里我們采用對(duì)的是相對(duì)布局RelativeLayout,當(dāng)然也可以采用幀布局FrameLayout。布局文件activity_mian.xml代碼:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     xmlns:tools="http://schemas.android.com/tools" 
  4.     android:id="@+id/activity_main" 
  5.     android:layout_width="match_parent" 
  6.     android:layout_height="match_parent" 
  7.     tools:context="com.qc.admin.mylunbotu.MainActivity"
  8.  
  9.     <RelativeLayout 
  10.         android:layout_width="match_parent" 
  11.         android:layout_height="160dp"
  12.  
  13.         <android.support.v4.view.ViewPager 
  14.             android:id="@+id/viewpager" 
  15.             android:layout_width="match_parent" 
  16.             android:layout_height="match_parent"
  17.  
  18.         </android.support.v4.view.ViewPager> 
  19.  
  20.         <LinearLayout 
  21.             android:layout_width="match_parent" 
  22.             android:layout_height="40dp" 
  23.             android:layout_alignParentBottom="true" 
  24.             android:background="#66000000" 
  25.             android:gravity="center_horizontal" 
  26.             android:orientation="vertical" 
  27.             android:padding="5dp"
  28.  
  29.             <TextView 
  30.                 android:id="@+id/tv_desc" 
  31.                 android:layout_width="wrap_content" 
  32.                 android:layout_height="wrap_content" 
  33.                 android:maxLines="1" 
  34.                 android:text="這是圖片描述" 
  35.                 android:textColor="@android:color/white" /> 
  36.  
  37.             <!--用來(lái)填充圓點(diǎn)指示器的容器--> 
  38.             <LinearLayout 
  39.                 android:id="@+id/point_container" 
  40.                 android:layout_width="wrap_content" 
  41.                 android:layout_height="wrap_content" 
  42.                 android:layout_marginTop="5dp" 
  43.                 android:orientation="horizontal" /> 
  44.         </LinearLayout> 
  45.     </RelativeLayout> 
  46. </RelativeLayout>  

2.初始化圓點(diǎn)指示器

這里我們提供的圖片數(shù)據(jù)和顯示的文本數(shù)據(jù)都是靜態(tài)的,直接從數(shù)組資源中獲得的,如:

  1. //圖片資源id數(shù)組 
  2.         imageResIds = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e}; 
  3.         // 文本描述 
  4.         contentDescs = new String[]{ 
  5.                 "鞏俐不低俗,我就不能低俗"
  6.                 "撲樹(shù)又回來(lái)啦!再唱經(jīng)典老歌引萬(wàn)人大合唱"
  7.                 "揭秘北京電影如何升級(jí)"
  8.                 "樂(lè)視網(wǎng)TV版大派送"
  9.                 "熱血屌絲的反殺" 
  10.         };  

我們可以自己定義兩個(gè)shape,來(lái)顯示圓點(diǎn)指示器的兩種不同顯示狀態(tài),然后再定義一個(gè)selector,將它設(shè)置為控件的背景(ImageView),通過(guò)其setEnable(Boolean bool)方法可以自動(dòng)的決定使用哪個(gè)圖片。代碼分別如下:

a.正常狀態(tài)下,灰色圓點(diǎn),point_normal.xml:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:shape="oval"
  4.     <size 
  5.         android:width="5dp" 
  6.         android:height="5dp" /> 
  7.     <solid android:color="#44000000" /> 
  8.  
  9. </shape>  

b.點(diǎn)擊狀態(tài)下,白色圓點(diǎn) point_pressed.xml:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:shape="oval"
  4.     <size android:width="5dp" android:height="5dp"/> 
  5.     <solid android:color="#FFFFFFFF"/> 
  6. </shape>  

c.設(shè)置背景時(shí)的xml文件, point_bg.xml:

  1. <selector xmlns:android="http://schemas.android.com/apk/res/android"
  2.  
  3.     <item android:state_enabled="true" android:drawable="@drawable/point_pressed"/> 
  4.     <item android:state_enabled="false" android:drawable="@drawable/point_normal"/> 
  5. </selector>  

具體代碼:

  1. private void initData() { 
  2.  
  3.        //圖片資源id數(shù)組 
  4.        imageResIds = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e}; 
  5.        // 文本描述 
  6.        contentDescs = new String[]{ 
  7.                "鞏俐不低俗,我就不能低俗"
  8.                "撲樹(shù)又回來(lái)啦!再唱經(jīng)典老歌引萬(wàn)人大合唱"
  9.                "揭秘北京電影如何升級(jí)"
  10.                "樂(lè)視網(wǎng)TV版大派送"
  11.                "熱血屌絲的反殺" 
  12.        }; 
  13.        imageViewList = new ArrayList<>(); 
  14.        LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
  15.        mParams.leftMargin = 15; 
  16.        mParams.topMargin = 2; 
  17.  
  18.        ImageView imageView; 
  19.        ImageView pointView; 
  20.        //初始化要展示的ImageView,并添加圓點(diǎn)指示器 
  21.        for (int i = 0; i < imageResIds.length; i++) { 
  22.            // 初始化圖片 
  23.            imageView = new ImageView(this); 
  24.            imageView.setBackgroundResource(imageResIds[i]); 
  25.            imageViewList.add(imageView); 
  26.  
  27.            // 初始化指示器 
  28.            pointView = new ImageView(this); 
  29.            pointView.setBackgroundResource(R.drawable.point_bg); 
  30.            pointView.setLayoutParams(mParams); 
  31.            if (i == 0) { 
  32.                textView.setText(contentDescs[0]); 
  33.                pointView.setEnabled(true); 
  34.            } else { 
  35.                pointView.setEnabled(false); 
  36.            } 
  37.            mPointsLayout.addView(pointView); 
  38.        } 
  39.    }  

注意:創(chuàng)建shape文件的時(shí)候,如果找不到,可以切換到project目錄下,在drawable目錄下右鍵,new->Drawable resource file ,得到如下界面: 

 

將selector直接改為shape即可

3.為ViewPager設(shè)置適配器

  1. class MyAdapter extends PagerAdapter { 
  2.  
  3.        // 1.返回條目的總數(shù) 
  4.        @Override 
  5.        public int getCount() { 
  6.  
  7.            //return imageViewList.size(); 
  8.            return Integer.MAX_VALUE; 
  9.        } 
  10.  
  11.        // 2.返回要顯示的條目,并創(chuàng)建條目 
  12.        @Override 
  13.        public Object instantiateItem(ViewGroup container, int position) { 
  14.            //container:容器,其實(shí)也就是ViewPager 
  15.            //position:當(dāng)前要顯示的條目的位置 
  16.  
  17.            int newPosition = position % imageViewList.size(); 
  18.            ImageView imageView = imageViewList.get(newPosition); 
  19.            //a.將View對(duì)象添加到container容器中 
  20.            container.addView(imageView); 
  21.            //b.把View對(duì)象返回給框架,適配器 
  22.            return imageView; 
  23.        } 
  24.  
  25.        // 3.銷(xiāo)毀條目,其實(shí)就是將要銷(xiāo)毀的對(duì)象object從container中移除出去就好了 
  26.        @Override 
  27.        public void destroyItem(ViewGroup container, int position, Object object) { 
  28.            container.removeView((View) object); 
  29.        } 
  30.  
  31.        // 4.指定復(fù)用的判斷邏輯(一般為固定寫(xiě)法) 
  32.        @Override 
  33.        public boolean isViewFromObject(View view, Object object) { 
  34.            // 當(dāng)滑動(dòng)到新的條目之后,又返回回來(lái),view是否可以被復(fù)用 
  35.            return view == object; 
  36.        } 
  37.    }  

在這里我們實(shí)現(xiàn)的是偽無(wú)限循環(huán),其實(shí)就是將我們的第一項(xiàng)設(shè)置為一個(gè)很大的數(shù)的中間位置(Integer.MAX_VALUE),這樣當(dāng)我們向左向右滑動(dòng)的時(shí)候,將返回的position對(duì)數(shù)據(jù)的大小進(jìn)行取模運(yùn)算%,根據(jù)相應(yīng)的位置設(shè)置相應(yīng)的圖片或者文字即可。這樣就實(shí)現(xiàn)了向右向左都是無(wú)限循環(huán)了。

4.實(shí)現(xiàn)自動(dòng)播放

我們當(dāng)然可以直接開(kāi)啟一個(gè)線程,在里面設(shè)置ViewPager的當(dāng)前項(xiàng),但是直接使用Handler更便于進(jìn)行控機(jī)制,因?yàn)槲覀兛梢詾閂iewPager設(shè)置滾動(dòng)監(jiān)聽(tīng)器。自動(dòng)播放控制代碼:

  1. private void startRun() { 
  2.         mHandler = new Handler(); 
  3.         mHandler.postDelayed(mTaskRunnable, delayMillis); 
  4.  
  5.     } 
  6.  
  7.     //該線程一直運(yùn)行著,知道activity被銷(xiāo)毀,此時(shí)將isActivityAlive設(shè)置為false 
  8.     final Runnable mTaskRunnable = new Runnable() { 
  9.         @Override 
  10.         public void run() { 
  11.             // 如果activity未被銷(xiāo)毀,就一直執(zhí)行該線程 
  12.             // 在ViewPager的OnPageChangeListener方法中決定是否將isAutoRun置反 
  13.             if (isActivityAlive) { 
  14.                 if (isAutoRun) { 
  15.                     viewPager.setCurrentItem((viewPager.getCurrentItem() + 1) % imageViewList.size()); 
  16.                     mHandler.postDelayed(mTaskRunnable, delayMillis); 
  17.                 } else { 
  18.                     mHandler.postDelayed(mTaskRunnable, delayMillis); 
  19.                 } 
  20.             } 
  21.         } 
  22.     };  

為ViewPager設(shè)置滾動(dòng)監(jiān)聽(tīng)器,這里我們直接讓當(dāng)前類(lèi)實(shí)現(xiàn)ViewPager.OnPageChangeListener接口,實(shí)現(xiàn)其中的抽象方法:

  1. @Override 
  2.     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
  3.  
  4.     } 
  5.  
  6.     @Override 
  7.     public void onPageSelected(int position) { 
  8.         int newPosition = position % imageViewList.size(); 
  9.         textView.setText(contentDescs[newPosition]); 
  10.  
  11.         // 先將上一個(gè)置位false,將當(dāng)前位置置位true,這樣可以使得初始化的時(shí)候就在第一個(gè)位置 
  12.         // (因?yàn)閜reviousSelectedItem的未賦值時(shí)候的初始值默認(rèn)為0) 
  13.         mPointsLayout.getChildAt(previousSelectedItem).setEnabled(false); 
  14.         mPointsLayout.getChildAt(newPosition).setEnabled(true); 
  15.         previousSelectedItem = newPosition; 
  16.     } 
  17.  
  18.     @Override 
  19.     public void onPageScrollStateChanged(int state) { 
  20.         switch (state) { 
  21.             // 靜止?fàn)顟B(tài) 
  22.             case SCROLL_STATE_IDLE: 
  23.                 isAutoRun = true
  24.                 break; 
  25.             // 拖拽中 
  26.             case SCROLL_STATE_DRAGGING: 
  27.                 isAutoRun = false
  28.                 break; 
  29.             // 拖拽后松手,自動(dòng)回到最終位置的過(guò)程 
  30.             case SCROLL_STATE_SETTLING: 
  31.                 isAutoRun = true
  32.                 break; 
  33.         } 
  34.     }  

這里面我們就實(shí)現(xiàn)了當(dāng)手指滑動(dòng)的時(shí)候停止自動(dòng)播放,當(dāng)手指抬起的時(shí)候又開(kāi)始了自動(dòng)播放。但是,注意,你以為這些代碼組合起來(lái)就能實(shí)現(xiàn)循環(huán)滾動(dòng)的同時(shí)還能手指控制是否自動(dòng)播放?好吧,我當(dāng)時(shí)也是這樣以為的,運(yùn)行后會(huì)報(bào)錯(cuò):

  1. java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first 

 

意思是我們待加入的子視圖已經(jīng)有了一個(gè)父視圖,需要調(diào)用它的父視圖的removeView()方法來(lái)將其移除,之后再添加,然而事實(shí)證明并沒(méi)有什么卵用。留待以后解決吧,在只能犧牲掉無(wú)線循環(huán)了,這里我們需要將getCount方法中的返回值改成我們數(shù)據(jù)的大小就好了: 

  1. @Override 
  2.        public int getCount() { 
  3.  
  4.            return imageViewList.size(); 
  5.           // return Integer.MAX_VALUE; 
  6.        }  

然后將之前設(shè)置的默認(rèn)的第一項(xiàng):

  1. private void initAdapter() { 
  2.         int firstPosition = Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2 % imageViewList.size()); 
  3.         //viewPager.setOffscreenPageLimit(imageViewList.size()); 
  4.         viewPager.setAdapter(new MyAdapter()); 
  5.         // 設(shè)置從中間的某個(gè)位置開(kāi)始滑動(dòng),從而能夠?qū)崿F(xiàn)向左向右的循環(huán)滑動(dòng) 
  6.         viewPager.setCurrentItem(firstPosition); 
  7.     }  

改為: 

  1. private void initAdapter() { 
  2.  
  3.        viewPager.setAdapter(new MyAdapter()); 
  4.        // 設(shè)置從中間的某個(gè)位置開(kāi)始滑動(dòng),從而能夠?qū)崿F(xiàn)向左向右的循環(huán)滑動(dòng) 
  5.        viewPager.setCurrentItem(0); 
  6.    }  

可能說(shuō)了這么多,看的都混了,在最后就貼一下完整的源碼吧(支持自動(dòng)播放、手指控制,但是不支持左右無(wú)限循環(huán))。 

  1. package com.qc.admin.mylunbotu; 
  2.  
  3. import android.os.Bundle; 
  4. import android.os.Handler; 
  5. import android.support.v4.view.PagerAdapter; 
  6. import android.support.v4.view.ViewPager; 
  7. import android.support.v7.app.AppCompatActivity; 
  8. import android.view.View
  9. import android.view.ViewGroup; 
  10. import android.widget.ImageView; 
  11. import android.widget.LinearLayout; 
  12. import android.widget.TextView; 
  13.  
  14. import java.util.ArrayList; 
  15. import java.util.List; 
  16.  
  17. import static android.support.v4.view.ViewPager.SCROLL_STATE_DRAGGING; 
  18. import static android.support.v4.view.ViewPager.SCROLL_STATE_IDLE; 
  19. import static android.support.v4.view.ViewPager.SCROLL_STATE_SETTLING; 
  20.  
  21.  
  22. public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener { 
  23.  
  24.  
  25.     private ViewPager viewPager; 
  26.     private int[] imageResIds; 
  27.     private List<ImageView> imageViewList; 
  28.     private LinearLayout mPointsLayout; 
  29.     private String[] contentDescs; 
  30.     private int previousSelectedItem; 
  31.     private TextView textView; 
  32.     private Handler mHandler; 
  33.     boolean isAutoRun = true
  34.     boolean isActivityAlive = true
  35.     private int delayMillis = 2000; 
  36.  
  37.     @Override 
  38.     protected void onCreate(Bundle savedInstanceState) { 
  39.         super.onCreate(savedInstanceState); 
  40.         setContentView(R.layout.activity_main); 
  41.  
  42.         //初始化視圖 
  43.         initViews(); 
  44.  
  45.         //初始化數(shù)據(jù) 
  46.         initData(); 
  47.  
  48.         //初始化適配器 
  49.         initAdapter(); 
  50.  
  51.         //開(kāi)始自動(dòng)播放 
  52.         startRun(); 
  53.  
  54.     } 
  55.  
  56.     private void startRun() { 
  57.         mHandler = new Handler(); 
  58.         mHandler.postDelayed(mTaskRunnable, delayMillis); 
  59.  
  60.     } 
  61.  
  62.     //該線程一直運(yùn)行著,知道activity被銷(xiāo)毀,此時(shí)將isActivityAlive設(shè)置為false 
  63.     final Runnable mTaskRunnable = new Runnable() { 
  64.         @Override 
  65.         public void run() { 
  66.             // 如果activity未被銷(xiāo)毀,就一直執(zhí)行該線程 
  67.             // 在ViewPager的OnPageChangeListener方法中決定是否將isAutoRun置反 
  68.             if (isActivityAlive) { 
  69.                 if (isAutoRun) { 
  70.                     viewPager.setCurrentItem((viewPager.getCurrentItem() + 1) % imageViewList.size()); 
  71.                     mHandler.postDelayed(mTaskRunnable, delayMillis); 
  72.                 } else { 
  73.                     mHandler.postDelayed(mTaskRunnable, delayMillis); 
  74.                 } 
  75.             } 
  76.         } 
  77.     }; 
  78.  
  79.     private void initAdapter() { 
  80.         //int firstPosition = Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2 % imageViewList.size()); 
  81.         //viewPager.setOffscreenPageLimit(imageViewList.size()); 
  82.         viewPager.setAdapter(new MyAdapter()); 
  83.         // 設(shè)置從中間的某個(gè)位置開(kāi)始滑動(dòng),從而能夠?qū)崿F(xiàn)向左向右的循環(huán)滑動(dòng) 
  84.         //viewPager.setCurrentItem(firstPosition); 
  85.         viewPager.setCurrentItem(0); 
  86.     } 
  87.  
  88.     private void initData() { 
  89.  
  90.         //圖片資源id數(shù)組 
  91.         imageResIds = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e}; 
  92.         // 文本描述 
  93.         contentDescs = new String[]{ 
  94.                 "鞏俐不低俗,我就不能低俗"
  95.                 "撲樹(shù)又回來(lái)啦!再唱經(jīng)典老歌引萬(wàn)人大合唱"
  96.                 "揭秘北京電影如何升級(jí)"
  97.                 "樂(lè)視網(wǎng)TV版大派送"
  98.                 "熱血屌絲的反殺" 
  99.         }; 
  100.         imageViewList = new ArrayList<>(); 
  101.         LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
  102.         mParams.leftMargin = 15; 
  103.         mParams.topMargin = 2; 
  104.  
  105.         ImageView imageView; 
  106.         ImageView pointView; 
  107.         //初始化要展示的ImageView,并添加圓點(diǎn)指示器 
  108.         for (int i = 0; i < imageResIds.length; i++) { 
  109.             // 初始化圖片 
  110.             imageView = new ImageView(this); 
  111.             imageView.setBackgroundResource(imageResIds[i]); 
  112.             imageViewList.add(imageView); 
  113.  
  114.             // 初始化指示器 
  115.             pointView = new ImageView(this); 
  116.             pointView.setBackgroundResource(R.drawable.point_bg); 
  117.             pointView.setLayoutParams(mParams); 
  118.             if (i == 0) { 
  119.                 textView.setText(contentDescs[0]); 
  120.                 pointView.setEnabled(true); 
  121.             } else { 
  122.                 pointView.setEnabled(false); 
  123.             } 
  124.             mPointsLayout.addView(pointView); 
  125.         } 
  126.     } 
  127.  
  128.     private void initViews() { 
  129.  
  130.         viewPager = (ViewPager) findViewById(R.id.viewpager); 
  131.         viewPager.addOnPageChangeListener(this); 
  132.  
  133.         textView = (TextView) findViewById(R.id.tv_desc); 
  134.         // 用來(lái)添加圓點(diǎn)指示器 
  135.         mPointsLayout = (LinearLayout) findViewById(R.id.point_container); 
  136.     } 
  137.  
  138.     @Override 
  139.     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
  140.  
  141.     } 
  142.  
  143.     @Override 
  144.     public void onPageSelected(int position) { 
  145.         int newPosition = position % imageViewList.size(); 
  146.         textView.setText(contentDescs[newPosition]); 
  147.  
  148.         // 先將上一個(gè)置位false,將當(dāng)前位置置位true,這樣可以使得初始化的時(shí)候就在第一個(gè)位置 
  149.         // (因?yàn)閜reviousSelectedItem的未賦值時(shí)候的初始值默認(rèn)為0) 
  150.         mPointsLayout.getChildAt(previousSelectedItem).setEnabled(false); 
  151.         mPointsLayout.getChildAt(newPosition).setEnabled(true); 
  152.         previousSelectedItem = newPosition; 
  153.     } 
  154.  
  155.     @Override 
  156.     public void onPageScrollStateChanged(int state) { 
  157.         switch (state) { 
  158.             // 靜止?fàn)顟B(tài) 
  159.             case SCROLL_STATE_IDLE: 
  160.                 isAutoRun = true
  161.                 break; 
  162.             // 拖拽中 
  163.             case SCROLL_STATE_DRAGGING: 
  164.                 isAutoRun = false
  165.                 break; 
  166.             // 拖拽后松手,自動(dòng)回到最終位置的過(guò)程 
  167.             case SCROLL_STATE_SETTLING: 
  168.                 isAutoRun = true
  169.                 break; 
  170.         } 
  171.     } 
  172.  
  173.     // 創(chuàng)建一個(gè)MyAdapter類(lèi),繼承自PagerAdapter來(lái)為ViewPager設(shè)置適配器 
  174.     class MyAdapter extends PagerAdapter { 
  175.  
  176.         // 1.返回條目的總數(shù) 
  177.         @Override 
  178.         public int getCount() { 
  179.  
  180.             return imageViewList.size(); 
  181. //            return Integer.MAX_VALUE; 
  182.         } 
  183.  
  184.         // 2.返回要顯示的條目,并創(chuàng)建條目 
  185.         @Override 
  186.         public Object instantiateItem(ViewGroup container, int position) { 
  187.             //container:容器,其實(shí)也就是ViewPager 
  188.             //position:當(dāng)前要顯示的條目的位置 
  189.  
  190.             int newPosition = position % imageViewList.size(); 
  191.             ImageView imageView = imageViewList.get(newPosition); 
  192.             //a.將View對(duì)象添加到container容器中 
  193.             container.addView(imageView); 
  194.             //b.把View對(duì)象返回給框架,適配器 
  195.             return imageView; 
  196.         } 
  197.  
  198.         // 3.銷(xiāo)毀條目,其實(shí)就是將要銷(xiāo)毀的對(duì)象object從container中移除出去就好了 
  199.         @Override 
  200.         public void destroyItem(ViewGroup container, int position, Object object) { 
  201.             container.removeView((View) object); 
  202.         } 
  203.  
  204.         // 4.指定復(fù)用的判斷邏輯(一般為固定寫(xiě)法) 
  205.         @Override 
  206.         public boolean isViewFromObject(View view, Object object) { 
  207.             // 當(dāng)滑動(dòng)到新的條目之后,又返回回來(lái),view是否可以被復(fù)用 
  208.             return view == object; 
  209.         } 
  210.     } 
  211.  
  212.     @Override 
  213.     protected void onDestroy() { 
  214.         isActivityAlive = false
  215.         super.onDestroy(); 
  216.     } 
  217.  
責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2023-08-08 14:31:42

輪播圖鴻蒙

2022-09-19 19:16:42

輪播圖has

2024-06-11 00:00:00

前端輪播圖硬件

2015-07-21 12:30:15

Swift輪播圖無(wú)限循環(huán)

2022-06-16 09:55:58

css輪播圖

2018-04-16 14:39:10

Vue輪播切換

2012-02-03 09:56:27

移動(dòng)廣告信息圖

2024-07-03 10:36:14

2024-03-20 09:40:27

動(dòng)畫(huà)技巧CSS逐幀動(dòng)畫(huà)

2016-03-31 11:28:21

imageView圖片輪播

2015-05-28 10:20:34

js相冊(cè)翻頁(yè)

2018-01-08 16:19:04

微信程序輪播圖

2018-04-18 14:38:14

廣告

2016-12-07 10:58:35

移動(dòng)應(yīng)用開(kāi)發(fā)底部導(dǎo)航android

2011-12-24 18:01:42

應(yīng)用

2024-01-03 12:57:38

輪播圖零代碼底層

2013-03-04 12:58:09

原生廣告移動(dòng)廣告

2021-11-03 07:58:27

SaaSRta技術(shù)

2024-05-30 08:23:37

ViewPager滑動(dòng)效果接口

2013-01-08 12:51:15

移動(dòng)廣告聲音聲盟
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)