精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

那年的RecyclerView我們從頭擼一下

移動(dòng)開發(fā) Android
我們能夠理解為,RecyclerView的一個(gè)恰當(dāng)?shù)氖褂脠鼍笆牵河捎诔叽缦拗疲脩舻脑O(shè)備不能一次性展現(xiàn)所有條目,用戶需要上下滾動(dòng)以查看更多條目。滾出可見區(qū)域的條目將被回收,并在下一個(gè)條目可見的時(shí)候被復(fù)用。

1. RecyclerView是什么?

根據(jù)Google官方給出的說明:A flexible view for providing a limited window into a large data set。能夠在有限的窗口中展示大數(shù)據(jù)集合的靈活視圖。

所以我們能夠理解為,RecyclerView的一個(gè)恰當(dāng)?shù)氖褂脠鼍笆牵河捎诔叽缦拗疲脩舻脑O(shè)備不能一次性展現(xiàn)所有條目,用戶需要上下滾動(dòng)以查看更多條目。滾出可見區(qū)域的條目將被回收,并在下一個(gè)條目可見的時(shí)候被復(fù)用。

對于減少內(nèi)存開銷和CPU的計(jì)算,緩存條目是一個(gè)非常有用的方法,因?yàn)檫@意味著我們不必每次都創(chuàng)建新的條目,從而減小內(nèi)存開銷和CPU的計(jì)算,而且還能夠有效降低屏幕的卡頓,保證滑動(dòng)的順滑。

RecyclerView不關(guān)心視覺效果(visuals)

但是和ListView有什么區(qū)別呀?我們已經(jīng)使用ListView很長一段時(shí)間了呀,它一樣可以做到呀。從它的類名上看,RecyclerView代表的意義是,我只管Recycler View,也就是說RecyclerView只管回收與復(fù)用View,其他的開發(fā)者可以自己去設(shè)置。你想要另一個(gè)布局?插入另一個(gè)LayoutManager。你想要不同的動(dòng)畫嗎?插入一個(gè)ItemAnimator,等等??梢钥闯銎涓叨鹊慕怦睿o予你充分的定制自由(所以你才可以輕松的通過這個(gè)控件實(shí)現(xiàn)ListView,GirdView,瀑布流等效果)。

2. 引入RecyclerView

RecyclerView 是Support Library的一部分。所以只需要在app/build.gradle中添加以下依賴,便能立即使用:

  1. dependencies { compile 'com.android.support:recyclerview-v7:25.3.1'

在布局文件中加入:

  1. <android.support.v7.widget.RecyclerView 
  2.  
  3. android:id="@+id/recycler_view" 
  4.  
  5. android:layout_width="match_parent" 
  6.  
  7. android:layout_height="match_parent" />  

然后在頁面中引入RecyclerView即可:

  1. RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

OK,從現(xiàn)在開始,讓我們一步一步,開始了解它。

3. 使用RecyclerView

下面的表格中就是使用RecyclerView來顯示數(shù)據(jù)中用到的幾個(gè)最重要的類,這些類都是RecyclerView的內(nèi)部類,如果你想使用RecyclerView,需要做以下操作:

Class 功能
Adapter 處理數(shù)據(jù)集合并負(fù)責(zé)綁定視圖
ViewHolder 持有所有的用于綁定數(shù)據(jù)或者需要操作的View
LayoutManager 負(fù)責(zé)擺放視圖等相關(guān)操作
ItemDecoration 負(fù)責(zé)繪制Item附近的分割線
ItemAnimator 為Item的一般操作添加動(dòng)畫效果,如,增刪條目等

我們可以從下圖更直觀的了解到RecyclerView的基本結(jié)構(gòu): 

 

接下來,我將要描述每個(gè)類或接口的內(nèi)容以及如何使用它。

3.1 RecyclerView.ViewHolder

ViewHolder的基本用法是用來存放View對象。Android團(tuán)隊(duì)很早之前就推薦使用“ViewHolder設(shè)計(jì)模式”,但是沒有要求開發(fā)者在Adapter中必須使用ViewHolder模式。那么現(xiàn)在對于這種新型的RecyclerView.Adapter,我們必須實(shí)現(xiàn)并使用這種模式。

Google官方等了這么長時(shí)間才強(qiáng)制使用ViewHolder模式,這有點(diǎn)奇怪,但遲做總比不做好。如果您不了解ViewHolder模式,請查看一下Android training Hold View Objects in a View Holder。另外網(wǎng)上有大量關(guān)于ListView優(yōu)化的文章。面試重點(diǎn)。

有一件事是專門針對RecyclerView的。ViewHolder子類可以通過訪問公共成員itemView來訪問ViewHolder的根視圖。所以不需要在ViewHolder子類中存儲(chǔ)。

下面是示例的ViewHolder的代碼,ViewHolder是示例Adapter的內(nèi)部類:

  1. public static class MyViewHolder extends RecyclerView.ViewHolder{         
  2.        TextView tv; 
  3.        public MyViewHolder(View itemView) {             
  4.            super(itemView); 
  5.            tv = (TextView) itemView.findViewById(R.id.tv); 
  6.        } 
  7.    }  

3.2 Adapter

Adapter扮演著兩個(gè)角色。一是,根據(jù)不同ViewType創(chuàng)建與之相應(yīng)的的Item-Layout,二是,訪問數(shù)據(jù)集合并將數(shù)據(jù)綁定到正確的View上。這就需要我們重寫以下3個(gè)方法:

  • public VH onCreateViewHolder(ViewGroup parent, int viewType) 創(chuàng)建Item視圖,并返回相應(yīng)的ViewHolder
  • public void onBindViewHolder(VH holder, int position) 綁定數(shù)據(jù)到正確的Item視圖上。
  • public int getItemCount() 返回該Adapter所持有的item數(shù)量

示例代碼如下所示:

  1. @Override 
  2.     public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  3.         MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context) 
  4.                 .inflate(R.layout.item_recycler_view,parent,false));         
  5.                 return holder; 
  6.     }     
  7.     @Override 
  8.     public void onBindViewHolder(MyViewHolder holder, int position) { 
  9.         holder.tv.setText(mDatas.get(position)); 
  10.     }     
  11.     @Override 
  12.     public int getItemCount() {         
  13.         return mDatas.size(); 
  14.     }  

因此,一個(gè)基本的RecyclerView.Adapter如下:

  1. public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {     
  2.     private Context context;     
  3.     private List<String> mDatas; 
  4.  
  5.     public RecyclerAdapter(Context context, List<String> mDatas) {         
  6.         this.context = context;         
  7.         this.mDatas = mDatas; 
  8.     }     
  9.     @Override 
  10.     public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {         
  11.         MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context) 
  12.                 .inflate(R.layout.item_recycler_view, parent, false));         
  13.         return holder; 
  14.     }     
  15.     @Override 
  16.     public void onBindViewHolder(MyViewHolder holder, int position) { 
  17.         holder.tv.setText(mDatas.get(position)); 
  18.     }     
  19.     @Override 
  20.     public int getItemCount() {         
  21.         return mDatas == null ? 0 : mDatas.size(); 
  22.     } 
  23.  
  24.     public static class MyViewHolder extends RecyclerView.ViewHolder {         
  25.         TextView tv; 
  26.  
  27.         public MyViewHolder(View itemView) {             
  28.             super(itemView); 
  29.             tv = (TextView) itemView.findViewById(R.id.tv); 
  30.         } 
  31.     } 
  32.  

3.3 RecyclerView.LayoutManager

LayoutManager的職責(zé)是擺放Item的位置,并且負(fù)責(zé)決定何時(shí)回收和重用Item。它有一個(gè)默認(rèn)的實(shí)現(xiàn):LinearLayoutManager,它可以用于垂直和水平列表。

RecyclerView.LayoutManager是一個(gè)抽象類,RecyclerView為我們提供3個(gè)實(shí)現(xiàn)類:

  1. LinearLayoutManager 現(xiàn)行管理器,支持橫向、縱向。
  2. GridLayoutManager 網(wǎng)格布局管理器
  3. StaggeredGridLayoutManager 瀑布流式布局管理器

3.3.1 LinearlayoutManager

LinearlayoutManager是LayoutManager的默認(rèn)實(shí)現(xiàn)。你可以使用這個(gè)類來創(chuàng)建垂直或水平列表。 

  1. // 設(shè)置RecyclerView布局方式為縱向布局 
  2. LinearLayoutManager layoutManager = new LinearLayoutManager(context); 
  3. layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
  4. recyclerView.setLayoutManager(layoutManager);  
  1. // 設(shè)置RecyclerView布局方式為橫向布局
  2. LinearLayoutManager layoutManager= new LinearLayoutManager(this);
  3. layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
  4. recyclerView.setLayoutManager(layoutManager); 

運(yùn)行程序,我們看到如下效果:  

 

我們發(fā)現(xiàn)和ListView有一些不同,沒有分割線讓這個(gè)列表看起來很不美觀,給RecyclerView設(shè)置分割線這個(gè)我們在下一小節(jié)說明。

當(dāng)然LinearlayoutManager中還有一些很實(shí)用的API:

  • findFirstVisibleItemPosition() 返回當(dāng)前***個(gè)可見Item的position
  • findFirstCompletelyVisibleItemPosition() 返回當(dāng)前***個(gè)完全可見Item的position
  • findLastVisibleItemPosition() 返回當(dāng)前***一個(gè)可見Item的position
  • findLastCompletelyVisibleItemPosition() 返回當(dāng)前***一個(gè)完全可見Item的position

3.3.2 GridLayoutManager

有兩個(gè)構(gòu)造方法:

  1. /** 
  2. * Creates a vertical GridLayoutManager 
  3. * @param context Current context, will be used to access resources. 
  4. * @param spanCount 設(shè)置行數(shù),因?yàn)槟J(rèn)是縱向的 
  5. */public GridLayoutManager(Context context, int spanCount) {     
  6.     super(context); 
  7.     setSpanCount(spanCount); 
  8. }/** 
  9. * @param context Current context, will be used to access resources. 
  10. * @param spanCount 設(shè)置行數(shù)或者列數(shù),根據(jù)方向 
  11. * @param orientation 布局方向 HORIZONTAL or VERTICAL. 
  12. * @param reverseLayout 是否反向顯示 When set to true, layouts from end to start. 
  13. */public GridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {     
  14.     super(context, orientation, reverseLayout); 
  15.     setSpanCount(spanCount); 
  16.  

我們按如下代碼設(shè)置:

  1. // 設(shè)置縱向的4列的表格布局GridLayoutManager layoutManager = new GridLayoutManager(this,4,GridLayoutManager.VERTICAL,false); 
  2. recyclerView.setLayoutManager(layoutManager); 
  3. // 設(shè)置橫向的3行的表格布局GridLayoutManager layoutManager = new GridLayoutManager(this,3,GridLayoutManager.HORIZONTAL,false); 
  4. recyclerView.setLayoutManager(layoutManager);   

 

3.3.3 StaggeredGridLayoutManager

我們來看StaggeredGridLayoutManager的構(gòu)造方法,只有一個(gè)方法

  1. /** 
  2. * Creates a StaggeredGridLayoutManager with given parameters. 
  3. * @param spanCount   設(shè)置行數(shù)或者列數(shù),根據(jù)方向,縱向就是列數(shù),橫向就是行數(shù) 
  4. * @param orientation 方向 
  5. */  
  6. public StaggeredGridLayoutManager(int spanCount, int orientation) {}  

因此我們這樣設(shè)置:

  1. // 設(shè)置縱向的瀑布流布局 
  2. StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL); 
  3. recyclerView.setLayoutManager(layoutManager);  

 

我們看效果和GridLayoutManager沒有什么區(qū)別呢,那我們來小小的修改一下,你就可以看到它的強(qiáng)大。

我們給每個(gè)item的布局加入margin:

  1. <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:orientation="vertical" android:layout_width="match_parent" 
  3.     android:layout_height="wrap_content" 
  4.     android:layout_margin="5dp" 
  5.     android:background="@color/colorAccent"
  6.  
  7.     <TextView 
  8.         android:id="@+id/tv" 
  9.         android:layout_width="100dp" 
  10.         android:layout_height="100dp" 
  11.         android:layout_gravity="center" 
  12.         android:gravity="center" 
  13.         android:textColor="#fff" 
  14.         /></LinearLayout>  

然后我們在適配器的onBindViewHolder方法中為我們的item設(shè)置個(gè)隨機(jī)的高度:

  1. //貼上部分代碼,其余的請看附件  
  2.     private List<Integer> mHeights;     
  3.     public RecyclerAdapter(Context context, List<String> mDatas) {         
  4.     this.context = context;         
  5.     this.mDatas = mDatas; 
  6.         mHeights = new ArrayList<Integer>();         
  7.             for (int i = 0; i < mDatas.size(); i++) { 
  8.             mHeights.add((int) (100 + Math.random() * 300)); 
  9.         } 
  10.     } 
  11.  
  12.     @Override     
  13.     public void onBindViewHolder(MyViewHolder holder,  
  14.         final int position) { 
  15.         ViewGroup.LayoutParams lp = holder.tv.getLayoutParams(); 
  16.         lp.height = mHeights.get(position); 
  17.         holder.tv.setLayoutParams(lp); 
  18.     }  

運(yùn)行,我們可以看到效果,是不是很炫! 

 

3.4 RecyclerView.ItemDecoration

通過設(shè)置

  1. recyclerView.addItemDecoration(new DividerDecoration(Context context, int orientation)); 

來改變Item之間的偏移量或者對Item進(jìn)行裝飾。

例如,在上面的設(shè)置LinearlayoutManager之后加入以下代碼,那么列表的效果就會(huì)發(fā)生改變:

  1. // 給縱向顯示RecyclerView設(shè)置分割線 
  2. recyclerView.addItemDecoration(new DividerItemDecoration(activity,DividerItemDecoration.VERTICAL)); 
  3. // 給橫向顯示RecyclerView設(shè)置分割線 
  4. recyclerView.addItemDecoration(new DividerItemDecoration(activity,DividerItemDecoration.HORIZONTAL));  

 

當(dāng)然,你也可以對RecyclerView設(shè)置多個(gè)ItemDecoration,列表展示的時(shí)候會(huì)遍歷所有的ItemDecoration并調(diào)用里面的繪制方法,對Item進(jìn)行裝飾。

RecyclerView.ItemDecoration是一個(gè)抽象類,可以通過重寫以下三個(gè)方法,來實(shí)現(xiàn)Item之間的偏移量或者裝飾效果:

  • public void onDraw(Canvas c, RecyclerView parent) 裝飾的繪制在Item條目繪制之前調(diào)用,所以這有可能被Item的內(nèi)容所遮擋
  • public void onDrawOver(Canvas c, RecyclerView parent) 裝飾的繪制在Item條目繪制之后調(diào)用,因此裝飾將浮于Item之上
  • public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) 與padding或margin類似,LayoutManager在測量階段會(huì)調(diào)用該方法,計(jì)算出每一個(gè)Item的正確尺寸并設(shè)置偏移量。

當(dāng)然了,如果我們使用GridLayoutManager后,對于分割線,前面的DividerItemDecoration就不適用了,主要是因?yàn)樗诶L制的時(shí)候,比如水平線,針對每個(gè)child的取值為:

  1. final int left = parent.getPaddingLeft(); 
  2. final int right = parent.getWidth() - parent.getPaddingRight(); 

因?yàn)槊總€(gè)Item一行,這樣是沒問題的。而GridLayoutManager時(shí),一行有多個(gè)childItem,這樣就多次繪制了,并且GridLayoutManager時(shí),Item如果為***一列(則右邊無間隔線)或者為***一行(底部無分割線)。

按照上述的方法,我們可以自定義一個(gè)DividerGridItemDecoration。由于代碼篇幅過長,我們在附件中給出。我們給GridLayoutManager設(shè)置DividerGridItemDecoration,運(yùn)行效果如下: 

 

 

3.5 RecyclerView.ItemAnimator

ItemAnimator能夠幫助Item實(shí)現(xiàn)獨(dú)立的動(dòng)畫。

ItemAnimator作觸發(fā)于以下三種事件:

  • 某條數(shù)據(jù)被插入到數(shù)據(jù)集合中
  • 從數(shù)據(jù)集合中移除某條數(shù)據(jù)
  • 更改數(shù)據(jù)集合中的某條數(shù)據(jù)

幸運(yùn)的是,在Android中默認(rèn)實(shí)現(xiàn)了一個(gè)DefaultItemAnimator,我們可以通過以下代碼為Item增加動(dòng)畫效果:

  1. recyclerView.setItemAnimator(new DefaultItemAnimator()); 

在之前的版本中,當(dāng)時(shí)據(jù)集合發(fā)生改變時(shí),我們通過調(diào)用.notifyDataSetChanged(),來刷新列表,因?yàn)檫@樣做會(huì)觸發(fā)列表的重繪,所以并不會(huì)出現(xiàn)任何動(dòng)畫效果,因此需要調(diào)用一些以notifyItem*()作為前綴的特殊方法,比如:

  • public final void notifyItemInserted(int position) 向指定位置插入Item
  • public final void notifyItemRemoved(int position) 移除指定位置Item
  • public final void notifyItemChanged(int position) 更新指定位置Item

下面我們使用DefaultItemAnimator來展示一下動(dòng)畫效果,修改代碼如下:

在Activity中添加兩個(gè)按鈕add和remove負(fù)責(zé)動(dòng)態(tài)插入和移除item

  1. btnAdd.setOnClickListener(new View.OnClickListener() {             
  2.             @Override 
  3.             public void onClick(View v) { 
  4.                 adapter.addData(1); 
  5.             } 
  6.         }); 
  7.  
  8. btnRemove.setOnClickListener(new View.OnClickListener() {             
  9.             @Override 
  10.             public void onClick(View v) { 
  11.                 adapter.removeData(2); 
  12.             } 
  13.         });  

在Adapter中添加兩個(gè)方法:

  1. public void addData(int position) { 
  2.         mDatas.add(position, "Insert"); 
  3.         mHeights.add( (int) (100 + Math.random() * 300)); 
  4.         notifyItemInserted(position); 
  5. }public void removeData(int position) { 
  6.         mDatas.remove(position); 
  7.         notifyItemRemoved(position); 
  8.  

運(yùn)行結(jié)果如下:  

 

 

3.6 Listeners

很遺憾,RecyclerView并沒有像ListView那樣提供以下兩個(gè)Item的點(diǎn)擊監(jiān)聽事件

  • public void setOnItemClickListener(@Nullable OnItemClickListener listener) Item點(diǎn)擊事件監(jiān)聽
  • public void setOnItemLongClickListener(OnItemLongClickListener listener) Item長按事件監(jiān)聽

但是這并不能阻攔我們的腳步,我可以定義這樣的兩個(gè)方法。

  1. public interface OnItemClickLitener {     
  2.     void onItemClick(View viewint position);     
  3.     void onItemLongClick(View viewint position); 
  4.     private OnItemClickLitener litener; 
  5.     public void setLitener(OnItemClickLitener litener) {     
  6.         this.litener = litener; 
  7.  

在onBindViewHolder方法中給需要響應(yīng)點(diǎn)擊事件的控件設(shè)置監(jiān)聽器:

  1. // 如果設(shè)置了回調(diào),則響應(yīng)點(diǎn)擊事件holder.itemView.setOnClickListener(new View.OnClickListener() {     
  2.     @Override 
  3.     public void onClick(View v) {         
  4.         if (litener != null) { 
  5.             litener.onItemClick(v, position); 
  6.         } 
  7.     } 
  8. }); 
  9.  
  10. holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {     
  11.     @Override 
  12.     public boolean onLongClick(View v) {         
  13.         if (litener != null) { 
  14.             litener.onItemLongClick(v, position); 
  15.         }        return false
  16.     } 
  17. });  

在Activity中設(shè)置這個(gè)方法:

  1. adapter.setLitener(new RecyclerAdapter.OnItemClickLitener() { 
  2.     @Override     
  3.     public void onItemClick(View viewint position) { 
  4.         Toast.makeText(activity,"第"+position+"項(xiàng)被點(diǎn)擊了",Toast.LENGTH_SHORT).show(); 
  5.     } 
  6.  
  7.     @Override     
  8.     public void onItemLongClick(View viewint position) { 
  9.         Toast.makeText(activity,"第"+position+"項(xiàng)被長按了",Toast.LENGTH_SHORT).show(); 
  10.     } 
  11. });  

效果如圖: 

 

責(zé)任編輯:龐桂玉 來源: 安卓巴士Android開發(fā)者門戶
相關(guān)推薦

2021-08-09 09:39:59

Docker部署鏡像

2021-08-07 07:56:59

Node邏輯對象

2023-06-30 08:27:20

2024-05-27 00:00:00

AmpPHP非阻塞

2018-02-08 10:52:13

Kotlin語言代碼

2023-06-05 14:14:21

騰訊索引面試

2021-10-27 06:49:34

線程池Core函數(shù)

2023-09-06 08:57:33

NLTK自然語言處理工具

2022-11-09 11:17:24

tee命令

2022-04-11 08:08:52

OpenGauss數(shù)據(jù)庫接口

2020-02-10 14:26:10

GitHub代碼倉庫

2021-04-21 14:19:52

javaignalHandle接口

2021-06-02 07:43:42

服務(wù)器阿里云配置

2020-03-27 11:41:12

線程 Java中止

2020-11-12 07:51:05

DockerSpring Boot應(yīng)用

2022-06-30 14:07:10

分庫分表系統(tǒng)

2021-11-08 17:03:13

IO模型

2011-10-12 11:07:12

iCloudiOS5蘋果

2021-05-31 06:00:55

Python 3.4枚舉開發(fā)

2013-07-31 17:47:16

網(wǎng)站制作Web制作Web網(wǎng)站
點(diǎn)贊
收藏

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

精品人妻久久久久一区二区三区| 成人性生活免费看| 国产福利视频在线| 丁香桃色午夜亚洲一区二区三区| 午夜精品久久久99热福利| 色噜噜色狠狠狠狠狠综合色一 | 手机在线电影一区| 欧美高清激情brazzers| www精品久久| 国产精品四虎| 国产成人av电影在线| 欧美做爰性生交视频| 调教驯服丰满美艳麻麻在线视频| 久久精品一级| 欧美在线一二三| 真人抽搐一进一出视频| 日本高清视频在线播放| 91在线观看下载| 91在线|亚洲| 黄色一级视频免费看| 午夜精品偷拍| 夜夜嗨av一区二区三区四区| 日本美女视频网站| 91亚洲精品在看在线观看高清| 精品日韩美女的视频高清| 一区二区三区四区免费观看| 黄色美女网站在线观看| 不卡一区在线观看| 亚洲a区在线视频| 夜夜爽妓女8888视频免费观看| 中文字幕一区二区av| 亚洲丝袜在线视频| 国产精品一区二区人妻喷水| 综合欧美精品| 欧美日韩视频在线观看一区二区三区 | 一区二区国产视频| 五月天国产一区| 男人的天堂在线| 懂色中文一区二区在线播放| 成人免费福利在线| 久久久久久久久久一级| 国产视频一区三区| 国自在线精品视频| 久久免费在线观看视频| 欧美在线精品一区| 久久精品一区中文字幕| 岛国片在线免费观看| 成人vr资源| 中文字幕欧美日韩精品| 亚洲一二三精品| 色喇叭免费久久综合| 在线观看国产欧美| 毛片aaaaaa| 香蕉视频国产精品| 久久综合伊人77777蜜臀| 很污很黄的网站| 欧美国产一级| 免费成人高清视频| 精品爆乳一区二区三区无码av| 欧美 日韩 国产一区二区在线视频| 久久精品人人做人人爽| 亚洲AV成人无码精电影在线| 亚洲国产精品综合久久久| 麻豆乱码国产一区二区三区 | 97人妻精品一区二区三区免费| 亚洲欧美日本国产| 亚洲第一精品福利| 可以直接看的无码av| 精品视频99| 日韩有码在线电影| 欧美三级 欧美一级| 韩日视频一区| 欧美一级在线播放| 羞羞色院91蜜桃| 极品少妇xxxx偷拍精品少妇| 91gao视频| 天堂а√在线8种子蜜桃视频 | 三年中国中文在线观看免费播放| 国产精品久久麻豆| 亚洲一区中文日韩| 欧美激情国产精品日韩| www.精品国产| 日韩欧美123| 国产又爽又黄无码无遮挡在线观看| 精品国产一区二区三区小蝌蚪 | 日本一区二区三区四区在线观看| yw193.com尤物在线| 亚洲精品写真福利| 成年人观看网站| 欧美性生活一级| 亚洲国产精久久久久久| 农村老熟妇乱子伦视频| 亚洲国产精品一区| 国产精品视频资源| 日本精品一二区| 亚洲国产精品二十页| 蜜臀av.com| 裤袜国产欧美精品一区| 欧美一区二区私人影院日本| 女尊高h男高潮呻吟| 亚洲一区在线| 国产福利成人在线| 人妻无码中文字幕| 中文字幕一区二区三区四区不卡| 日韩精品―中文字幕| 未满十八勿进黄网站一区不卡| 精品国产一二三| 中文字幕91视频| 免费永久网站黄欧美| 99re在线国产| 无遮挡的视频在线观看 | 国产精品天干天干在线综合| 国产一线二线三线女| 精品美女一区| 亚洲美女在线视频| 久久精品欧美一区二区| 久久99热这里只有精品| 欧美自拍资源在线| 91吃瓜在线观看| 欧美一级一区二区| 久久久久麻豆v国产| 久久久久久网| 久久riav二区三区| 国产福利在线免费观看| 91麻豆精品国产91久久久久久久久| 亚洲乱码国产乱码精品精大量| 欧美日韩岛国| 1卡2卡3卡精品视频| 日本不卡视频| 欧美日韩综合在线免费观看| 成人免费无遮挡无码黄漫视频| 在线国产欧美| 国产精品毛片va一区二区三区| 黄色在线观看网站| 欧美高清www午色夜在线视频| 黄色三级生活片| 日韩av高清在线观看| 欧美凹凸一区二区三区视频| 极品av在线| 亚洲精品v欧美精品v日韩精品| 久久亚洲国产成人精品性色| 国产一区91精品张津瑜| 久久免费看毛片| 四虎精品一区二区免费| 日韩一区二区久久久| 亚洲一区精品在线观看| 国产精品女人毛片| 亚洲欧美日韩一级| 欧美超碰在线| 91色视频在线观看| av免费在线观看网站| 欧美一区二区黄| 妺妺窝人体色www聚色窝仙踪| 国产成人综合自拍| 丰满岳乱妇国产精品一区| 国产精品无码永久免费888| 欧美少妇性生活视频| 国产一区二区三区天码| 国产精品久久综合av爱欲tv| 国产午夜视频在线观看| 欧美亚洲日本国产| 黑人狂躁日本娇小| 国产麻豆成人精品| 国产午夜福利100集发布| 精品欧美午夜寂寞影院| 欧美一区二区.| 亚洲系列中文字幕| 二区三区四区视频| 国产精品99久| 国产69精品久久久久久久| 婷婷综合成人| 激情av综合| 亚洲男人天堂2019| 亚洲天堂视频在线播放| 中文子幕无线码一区tr| 中文字幕资源在线观看| 午夜日韩视频| 乌克兰美女av| 九九综合九九| 国产精品视频精品| 黄色网页在线看| 精品久久久三级丝袜| 91蜜桃视频在线观看| 久久久久久97三级| 欧美激情第3页| 国产精品草草| 日本高清不卡一区二区三| 久久精品嫩草影院| 国产最新精品视频| 91精品国产91久久久久游泳池 | 国产精品色一区二区三区| 亚洲视频在线不卡| 香蕉久久国产| 一级一片免费播放| 欧美三级电影在线| 国产有码在线一区二区视频| 999av小视频在线| 中文字幕久久久| 理论片中文字幕| 欧美日韩一区二区欧美激情| 五月天综合在线| 国产精品久线在线观看| 成人在线视频免费播放| 久久国产精品第一页| 亚洲中文字幕无码专区| 亚洲精品成人影院| 日本一区二区三区四区高清视频| jizz性欧美2| 成人精品网站在线观看| 日韩欧美精品电影| 国外色69视频在线观看| a视频在线观看免费| 国产一区二区三区丝袜 | 国产一区二区| 国产精品福利在线观看| 9765激情中文在线| 欧美精品情趣视频| 日韩三级影院| 国产亚洲精品久久久| 香蕉av在线播放| 精品欧美久久久| av网站免费大全| 欧美精品国产精品| 中文字幕人妻一区二区在线视频| 天天色 色综合| 免费一级特黄特色大片| 亚洲视频一二三区| 欧美xxxooo| 国产精品三级视频| 欧美熟妇激情一区二区三区| 97久久精品人人做人人爽| 亚洲黄色小说在线观看| 国产一级精品在线| 美女被艹视频网站| 国产精品18久久久久久久久久久久| 波多结衣在线观看| 秋霞影院一区二区| 久久久久久三级| 老司机亚洲精品| 日韩视频在线免费看| 欧美一区=区| avav在线看| 老司机久久99久久精品播放免费| 日本在线观看a| 久久精品亚洲| 男女男精品视频站| 青草国产精品久久久久久| 手机看片福利日韩| 日本午夜精品视频在线观看| 婷婷丁香激情网| 蜜臀久久99精品久久久画质超高清| 日本www.色| 麻豆91在线播放| 欧美污在线观看| 成人晚上爱看视频| 精品人妻一区二区三区日产乱码卜| 97se亚洲国产综合自在线不卡 | 18成人在线观看| 欧美 日韩 国产 一区二区三区| 亚洲女人小视频在线观看| 免费三级在线观看| 亚洲小说欧美激情另类| 国产精品999在线观看| 欧美性猛交xxxx富婆| 啪啪小视频网站| 欧美肥妇毛茸茸| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 亚洲第一精品久久忘忧草社区| 欧美成人综合在线| 日韩中文在线观看| 色在线视频网| 热草久综合在线| 亚洲网站三级| 国产日韩在线一区二区三区| 国产成人ay| 国产奶头好大揉着好爽视频| 亚洲国产高清视频| 亚洲国产高清av| 成人免费高清在线观看| 国产精品久久久久无码av色戒| 亚洲国产精品ⅴa在线观看| 免费在线黄色网| 欧美性猛交xxxx乱大交蜜桃| 6—12呦国产精品| 亚洲精品av在线| 午夜在线小视频| 性色av一区二区三区| 欧美日韩va| 欧美极品一区| 欧美区一区二| 亚洲娇小娇小娇小| 99久精品国产| 中国一级片在线观看| 欧美日韩亚洲91| 国产美女裸体无遮挡免费视频| 亚洲精品国产精品久久清纯直播| 午夜在线免费观看视频| 91wwwcom在线观看| 免费欧美网站| 深夜福利成人| 日韩午夜精品| 国产91在线免费观看| 国产欧美精品一区二区三区四区| 久久精品一级片| 欧美日韩www| 日本护士...精品国| 精品自拍视频在线观看| 成人国产综合| 蜜桃网站成人| 亚洲日本成人| 亚洲成人av免费观看| 国产欧美精品国产国产专区| 国产午夜久久久| 91精品国产一区二区三区蜜臀| 久色视频在线| 日本电影亚洲天堂| 六月丁香久久丫| 久久精品xxx| 国产一区二区三区精品欧美日韩一区二区三区| 丝袜美腿中文字幕| 午夜激情久久久| 成 人 黄 色 片 在线播放| 视频在线观看99| 蜜桃成人精品| 欧美日韩在线高清| 国产手机视频一区二区 | 日韩系列在线| 欧美午夜性视频| 国产91对白在线观看九色| 波多野结衣在线网址| 欧美三级电影网站| 欧洲日本在线| 国产欧美日韩亚洲精品| 成人3d精品动漫精品一二三| 久久久久久三级| 中文字幕免费一区| 在线播放成人av| 中文字幕亚洲一区二区三区| 高清在线一区| 亚洲免费精品视频| 久久超级碰视频| 国产成人免费在线观看视频| 欧美日韩国产一级片| melody高清在线观看| 国产精品久久久久久久午夜| 国内成人精品| 性刺激的欧美三级视频| 国产精品久久久久久久久动漫 | 激情欧美日韩一区二区| 久久精品在线观看视频| 91精品久久久久久久91蜜桃| 国产视频中文字幕在线观看| 91精品天堂| 亚洲高清网站| 五月婷婷综合在线观看| 欧美亚洲国产一区二区三区va| h网站在线免费观看| 成人国产精品日本在线| 欧美精品一卡| xxxx黄色片| 91国产免费观看| 免费网站免费进入在线| 成人区精品一区二区| 亚洲电影av| 免费网站在线高清观看| 欧美日韩国产123区| 日韩av激情| 精品亚洲第一| 老司机精品视频导航| www青青草原| 亚洲毛茸茸少妇高潮呻吟| 91欧美精品| 日韩一级特黄毛片| 久久影院视频免费| 91黄色在线视频| 欧美成人午夜激情在线| 欧美xxxx在线| 免费看涩涩视频| 亚洲成人av一区二区三区| 国产免费av在线| 99www免费人成精品| 久久天天综合| 国产女人被狂躁到高潮小说| 亚洲精品日韩欧美| 蜜桃在线一区| 欧美日韩在线成人| 亚洲在线一区二区三区| 国产乱子伦三级在线播放| 91视频免费进入| 日韩和欧美的一区| 精品无码人妻一区二区三| 伊人精品在线观看| 国产成人澳门| 在线观看国产一级片| 精品久久久久人成| 成人免费高清| 丝袜美腿玉足3d专区一区| 成人午夜电影久久影院| 亚洲熟妇无码久久精品| 久久免费精品日本久久中文字幕|