成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ViewPager實現輪播廣告圖

移動開發 Android
輪播廣告在現在的應用中比較常見,下面就來實現下該功能(文章參考了網上流傳的黑馬的視頻教程)先來看下具體的實現效果。首先需要說明的就是在這篇文章里并沒有同時實現左右循環滑動和手指觸碰自動停止的功能,這個問題還沒有解決,留待以后再解決,也希望有知道的朋友在下面留言。

[[177558]]

輪播廣告在現在的應用中比較常見,下面就來實現下該功能(文章參考了網上流傳的黑馬的視頻教程)先來看下具體的實現效果:  

 

實現思路:

1.為ViewPager設置數據源,實現ViewPager的滾動

2.將圓點指示器與ViewPager的頁面對應起來

3.實現左右滑動均能無限循環

4.實現自動播放

5.實現當手指滑動的時候取消自動播發

首先需要說明的就是在這篇文章里并沒有同時實現左右循環滑動和手指觸碰自動停止的功能,這個問題還沒有解決,留待以后再解決,也希望有知道的朋友在下面留言,先謝謝拉。

1.首先我們定義布局文件,用來顯示Banner

這里我們采用對的是相對布局RelativeLayout,當然也可以采用幀布局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.             <!--用來填充圓點指示器的容器--> 
  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.初始化圓點指示器

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

  1. //圖片資源id數組 
  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.                 "撲樹又回來啦!再唱經典老歌引萬人大合唱"
  7.                 "揭秘北京電影如何升級"
  8.                 "樂視網TV版大派送"
  9.                 "熱血屌絲的反殺" 
  10.         };  

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

a.正常狀態下,灰色圓點,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.點擊狀態下,白色圓點 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.設置背景時的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數組 
  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.                "撲樹又回來啦!再唱經典老歌引萬人大合唱"
  9.                "揭秘北京電影如何升級"
  10.                "樂視網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,并添加圓點指示器 
  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.    }  

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

 

將selector直接改為shape即可

3.為ViewPager設置適配器

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

在這里我們實現的是偽無限循環,其實就是將我們的第一項設置為一個很大的數的中間位置(Integer.MAX_VALUE),這樣當我們向左向右滑動的時候,將返回的position對數據的大小進行取模運算%,根據相應的位置設置相應的圖片或者文字即可。這樣就實現了向右向左都是無限循環了。

4.實現自動播放

我們當然可以直接開啟一個線程,在里面設置ViewPager的當前項,但是直接使用Handler更便于進行控機制,因為我們可以為ViewPager設置滾動監聽器。自動播放控制代碼:

  1. private void startRun() { 
  2.         mHandler = new Handler(); 
  3.         mHandler.postDelayed(mTaskRunnable, delayMillis); 
  4.  
  5.     } 
  6.  
  7.     //該線程一直運行著,知道activity被銷毀,此時將isActivityAlive設置為false 
  8.     final Runnable mTaskRunnable = new Runnable() { 
  9.         @Override 
  10.         public void run() { 
  11.             // 如果activity未被銷毀,就一直執行該線程 
  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設置滾動監聽器,這里我們直接讓當前類實現ViewPager.OnPageChangeListener接口,實現其中的抽象方法:

  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.         // 先將上一個置位false,將當前位置置位true,這樣可以使得初始化的時候就在第一個位置 
  12.         // (因為previousSelectedItem的未賦值時候的初始值默認為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.             // 靜止狀態 
  22.             case SCROLL_STATE_IDLE: 
  23.                 isAutoRun = true
  24.                 break; 
  25.             // 拖拽中 
  26.             case SCROLL_STATE_DRAGGING: 
  27.                 isAutoRun = false
  28.                 break; 
  29.             // 拖拽后松手,自動回到最終位置的過程 
  30.             case SCROLL_STATE_SETTLING: 
  31.                 isAutoRun = true
  32.                 break; 
  33.         } 
  34.     }  

這里面我們就實現了當手指滑動的時候停止自動播放,當手指抬起的時候又開始了自動播放。但是,注意,你以為這些代碼組合起來就能實現循環滾動的同時還能手指控制是否自動播放?好吧,我當時也是這樣以為的,運行后會報錯:

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

 

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

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

然后將之前設置的默認的第一項:

  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.         // 設置從中間的某個位置開始滑動,從而能夠實現向左向右的循環滑動 
  6.         viewPager.setCurrentItem(firstPosition); 
  7.     }  

改為: 

  1. private void initAdapter() { 
  2.  
  3.        viewPager.setAdapter(new MyAdapter()); 
  4.        // 設置從中間的某個位置開始滑動,從而能夠實現向左向右的循環滑動 
  5.        viewPager.setCurrentItem(0); 
  6.    }  

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

  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.         //初始化數據 
  46.         initData(); 
  47.  
  48.         //初始化適配器 
  49.         initAdapter(); 
  50.  
  51.         //開始自動播放 
  52.         startRun(); 
  53.  
  54.     } 
  55.  
  56.     private void startRun() { 
  57.         mHandler = new Handler(); 
  58.         mHandler.postDelayed(mTaskRunnable, delayMillis); 
  59.  
  60.     } 
  61.  
  62.     //該線程一直運行著,知道activity被銷毀,此時將isActivityAlive設置為false 
  63.     final Runnable mTaskRunnable = new Runnable() { 
  64.         @Override 
  65.         public void run() { 
  66.             // 如果activity未被銷毀,就一直執行該線程 
  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.         // 設置從中間的某個位置開始滑動,從而能夠實現向左向右的循環滑動 
  84.         //viewPager.setCurrentItem(firstPosition); 
  85.         viewPager.setCurrentItem(0); 
  86.     } 
  87.  
  88.     private void initData() { 
  89.  
  90.         //圖片資源id數組 
  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.                 "撲樹又回來啦!再唱經典老歌引萬人大合唱"
  96.                 "揭秘北京電影如何升級"
  97.                 "樂視網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,并添加圓點指示器 
  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.         // 用來添加圓點指示器 
  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.         // 先將上一個置位false,將當前位置置位true,這樣可以使得初始化的時候就在第一個位置 
  149.         // (因為previousSelectedItem的未賦值時候的初始值默認為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.             // 靜止狀態 
  159.             case SCROLL_STATE_IDLE: 
  160.                 isAutoRun = true
  161.                 break; 
  162.             // 拖拽中 
  163.             case SCROLL_STATE_DRAGGING: 
  164.                 isAutoRun = false
  165.                 break; 
  166.             // 拖拽后松手,自動回到最終位置的過程 
  167.             case SCROLL_STATE_SETTLING: 
  168.                 isAutoRun = true
  169.                 break; 
  170.         } 
  171.     } 
  172.  
  173.     // 創建一個MyAdapter類,繼承自PagerAdapter來為ViewPager設置適配器 
  174.     class MyAdapter extends PagerAdapter { 
  175.  
  176.         // 1.返回條目的總數 
  177.         @Override 
  178.         public int getCount() { 
  179.  
  180.             return imageViewList.size(); 
  181. //            return Integer.MAX_VALUE; 
  182.         } 
  183.  
  184.         // 2.返回要顯示的條目,并創建條目 
  185.         @Override 
  186.         public Object instantiateItem(ViewGroup container, int position) { 
  187.             //container:容器,其實也就是ViewPager 
  188.             //position:當前要顯示的條目的位置 
  189.  
  190.             int newPosition = position % imageViewList.size(); 
  191.             ImageView imageView = imageViewList.get(newPosition); 
  192.             //a.將View對象添加到container容器中 
  193.             container.addView(imageView); 
  194.             //b.把View對象返回給框架,適配器 
  195.             return imageView; 
  196.         } 
  197.  
  198.         // 3.銷毀條目,其實就是將要銷毀的對象object從container中移除出去就好了 
  199.         @Override 
  200.         public void destroyItem(ViewGroup container, int position, Object object) { 
  201.             container.removeView((View) object); 
  202.         } 
  203.  
  204.         // 4.指定復用的判斷邏輯(一般為固定寫法) 
  205.         @Override 
  206.         public boolean isViewFromObject(View view, Object object) { 
  207.             // 當滑動到新的條目之后,又返回回來,view是否可以被復用 
  208.             return view == object; 
  209.         } 
  210.     } 
  211.  
  212.     @Override 
  213.     protected void onDestroy() { 
  214.         isActivityAlive = false
  215.         super.onDestroy(); 
  216.     } 
  217.  
責任編輯:龐桂玉 來源: segmentfault
相關推薦

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輪播圖無限循環

2022-06-16 09:55:58

css輪播圖

2012-02-03 09:56:27

移動廣告信息圖

2018-04-16 14:39:10

Vue輪播切換

2024-07-03 10:36:14

2024-03-20 09:40:27

動畫技巧CSS逐幀動畫

2015-05-28 10:20:34

js相冊翻頁

2016-03-31 11:28:21

imageView圖片輪播

2018-04-18 14:38:14

廣告

2018-01-08 16:19:04

微信程序輪播圖

2016-12-07 10:58:35

移動應用開發底部導航android

2011-12-24 18:01:42

應用

2013-03-04 12:58:09

原生廣告移動廣告

2025-05-19 08:15:00

ChromeCSS輪播特效

2024-01-03 12:57:38

輪播圖零代碼底層

2021-11-03 07:58:27

SaaSRta技術

2014-12-23 14:28:58

廣告家
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩视频网站 | av大片在线观看 | www.国产.com| 黑人久久| 久草在线高清 | 精品久久久久久久久亚洲 | 五月激情婷婷六月 | 91精品国产一区二区三区 | 伊人最新网址 | 免费视频99 | 在线一区观看 | 欧美激情久久久久久 | 日韩高清www| 精品自拍视频在线观看 | 亚洲国产高清高潮精品美女 | 涩在线| 四虎永久免费在线 | 国产日韩一区二区三区 | 粉色午夜视频 | 国产精品久久久久一区二区三区 | 久草青青草 | 中文亚洲视频 | 7777精品伊人久久精品影视 | 国产一区在线免费 | 91香蕉嫩草 | 欧美一级视频在线观看 | 日韩亚洲一区二区 | 亚洲成人免费 | 自拍偷拍亚洲视频 | 天堂一区二区三区 | 超级碰在线 | 国产一区2区 | 欧美精品一区二区三区四区 在线 | 视频一区在线播放 | 国产乱码精品1区2区3区 | 亚洲综合首页 | 久久久久久久久久久久久九 | 欧美一级在线免费观看 | 免费在线观看一区二区三区 | 成人国产一区二区三区精品麻豆 | 日韩欧美网 |