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

網易云音樂、手機QQ的換膚是怎么做到的

移動開發 Android
關于Android的主題換膚都是個老生常談的問題了。網上給出的方案也是層出不窮,最近我也是很想去了解這方面的知識,所以我去搜一下就會有一大堆介紹這方面的文章。今天我要實現的一個換膚方案是基于github上的這個開源框架Android-Skin-Loader。

Android的主題換膚 ,可插件化提供皮膚包,無需Activity的重啟直接實現無縫切換,可高仿網易云音樂的主題換膚。

這個鏈接是本次的Demo打包出來的樣本SkinChangeDemo,可以去下載下來先試試效果,皮膚文件需放到存儲卡的根目錄下。

關于Android的主題換膚都是個老生常談的問題了。網上給出的方案也是層出不窮,最近我也是很想去了解這方面的知識,所以我去搜一下就會有一大堆介紹這方面的文章,但是最后的結果都是不盡人意的,有的確實是給出了一些比較好的解決方案,但是沒有一個實質性的Demo可以參考,所以也只能是紙上談兵罷了,有的呢,確實是給出了一個參考的Demo但是最后的結果不是我想要的。關于Android的換膚方案技術的總結,這篇文章還是挺有參考價值的Android換膚技術總結。感興趣的同學可以去了解下,就當做是一個知識的普及。

今天我要實現的一個換膚方案是基于github上的這個開源框架Android-Skin-Loader。

這個框架的換膚機制是使用動態加載的機制去加載皮膚包里面的內容,無需Acitvity重啟即可實現皮膚的實時更換,皮膚包是可以與原安裝包相分離的,需要自己定做(這個皮膚包其實也就是一個普通的Android項目,只是只有資源文件沒有類文件而已),這樣做的好處就是可以在線提供皮膚包供用戶去下載,也可以大大的減少安裝包的體積,同時也很好的實現了插件化。其實這個框架是可以拿來直接來用的,直接幾行代碼基本上就可以解決Android的主題換膚,但是作為一個程序員怎么可以只是簡單的知道怎么用就行了嗎?如果真是這樣就真的太low了。遇到一個好的開源項目我們至少需要把他的源碼大致看一下,走一下基本的流程,了解一下他的基本原理,這樣我們在技術上才會有所提升。本文實現的Demo是基于在我前段時間發布的Android Material Design 兼容庫的使用詳解一文中的Demo改進的。最后實現的App也是MaterialDesign的設計風格。

好了說了這么多,通過本文你可以學到什么,這個可能是大家比較關心的一點

  • 設計出一個基于MaterialDesign風格的App
  • 自己實現一個主題換膚的框架
  • 高仿網易云音樂的主題換膚(ps:其實本來我想以這個作為標題的,這樣做也可以增加流量,可我不想單純的做個標題黨,給大家帶來干貨才是最重要的)
  • 讓你的技術更上一層樓(這個說了也是白說)

說了這么久可能就會有人按捺不住了:我是來看干貨的,不是來這聽你瞎BB的。不要急干貨馬上來。如果實在感覺枯燥可以直接跳到文末去看源碼。下面先來幾張效果圖來爽一下

網易云音樂、手機QQ的換膚是怎么做到的

這個是網易云音樂的換膚界面,他提供了幾個默認的,也提供了可以在線下載的主題,他的切換效果還是非常贊的,用過這個軟件的同學肯定是知道的。學習完本文后就可以做出類似于這個換膚效果。

網易云音樂、手機QQ的換膚是怎么做到的

這個動態圖是最終我們這個Demo實現的效果,這個Demo總體來說還是比較簡單的,只提供了三種皮膚。實現了一個基本的換膚效果,主要還是用于拿來學習使用。當然更復雜的換膚基于這個Demo也是可以辦到的,這里主要還是去講解原理。

在介紹之前還需要先給大家普及一下LayoutInflaterFactory相關的知識。如果已經知道了這方面的知識點,下面這一段可以直接略過。

對于LayoutInflater大家可能都不太陌生,當你需要把xml文件轉化成對應View的時候就必須用到它,我想對于他怎么使用的就不用我介紹了。LayoutInflater 提供了setFactory(LayoutInflater.Factory factory)和setFactory2(LayoutInflater.Factory2 factory)兩個方法可以讓你去自定義布局的填充(有點類似于過濾器,我們在填充這個View之前可以做一些額外的事,但不完全是),Factory2 是在API 11才添加的。 他們提供了下面的方法讓你去重寫。在這里面你完全可以自己去定義去創建你所想要的View,如果在你在重寫的方法中返回null的話,就會以系統默認的方式去創建View。

  1. View onCreateView(String name, Context context, AttributeSet attrs)//LayoutInflater.Factory 
  2. View onCreateView(View parent, String name, Context context, AttributeSet attrs)//LayoutInflater.Factory2 

LayoutInflater都被設置了一個默認的Factory,Activity 是實現了LayoutInflater.Factory接口的,因此在你的Activity中直接重寫onCreateView就可以自定義View的填充了。

下面這句是對LayoutInflater.Factory一個比較好的理解

  • Inflating your own custom views, instead of letting the system do it

這個也是這個Demo其中的一個比較重要技術點。如果有想更詳細了解的文末會有參考鏈接。

下面就正式開始介紹怎么去做這個主題換膚吧。

先來看看這個Demo的項目結構:

至于xRecyclerView可以不用管,這里我們用不到(這是之前用到的,與本次無關),他只是一個RecyclerView的一個擴展框架,支持下拉刷新和上拉加載,是一個在github上的一個開源項目。

這里我們直接來看看lib_skinloader這個庫吧(這里面的內容大部分是來源于Android-Skin-Loader這個框架,我只做了部分修改,主要是適配AppCompatActivity,原框架是基于最初的Activty開發的,在這里再次感謝開源作者),這個庫就是今天所講的核心內容

網易云音樂、手機QQ的換膚是怎么做到的

我們都知道在Android中如果想去獲取資源文件都必須通過Resources去獲取。這個庫的核心思想就是動態的去加載第三方包里面的包,獲取到其Resources然后以獲取到的這個Resources去獲取第三方包里面的資源內容,最后設置到我們有需響應皮膚更改的View上。

這里我就只介紹load和base兩個包,其他包的內容在講解的時候會涉及到

1.load包

我們先來看看這個load包里面的內容(其實這里就是今天核心內容的核心)。

網易云音樂、手機QQ的換膚是怎么做到的

里面有兩個類文件:SkinInflaterFactory、SkinManager

我們先來看看SkinManager的實現,直接跳到load方法

  1. public void load(String skinPackagePath, final ILoaderListener callback) { 
  2.  new AsyncTask<String, Void, Resources>() { 
  3.  protected void onPreExecute() { 
  4.  if (callback != null) { 
  5.  callback.onStart(); 
  6.  } 
  7.  } 
  8.  @Override 
  9.  protected Resources doInBackground(String... params) { 
  10.  try { 
  11.  if (params.length == 1) { 
  12.  String skinPkgPath = params[0]; 
  13.  Log.i("loadSkin", skinPkgPath); 
  14.  File file = new File(skinPkgPath); 
  15.  if (file == null || !file.exists()) { 
  16.  return null
  17.  } 
  18.  PackageManager mPm = context.getPackageManager(); 
  19.  PackageInfo mInfo = mPm.getPackageArchiveInfo(skinPkgPath, PackageManager.GET_ACTIVITIES); 
  20.  skinPackageName = mInfo.packageName; 
  21.  AssetManager assetManager = AssetManager.class.newInstance(); 
  22.  Method addAssetPath = assetManager.getClass().getMethod("addAssetPath", String.class); 
  23.  addAssetPath.invoke(assetManager, skinPkgPath); 
  24.  Resources superRes = context.getResources(); 
  25.  Resources skinResource = new Resources(assetManager, superRes.getDisplayMetrics(), superRes.getConfiguration()); 
  26.  SkinConfig.saveSkinPath(context, skinPkgPath); 
  27.  skinPath = skinPkgPath; 
  28.  isDefaultSkin = false
  29.  return skinResource; 
  30.  } 
  31.  return null
  32.  } catch (Exception e) { 
  33.  e.printStackTrace(); 
  34.  return null
  35.  } 
  36.  } 
  37.  protected void onPostExecute(Resources result) { 
  38.  mResources = result; 
  39.  if (mResources != null) { 
  40.  if (callback != null) callback.onSuccess(); 
  41.  notifySkinUpdate(); 
  42.  } else { 
  43.  isDefaultSkin = true
  44.  if (callback != null) callback.onFailed(); 
  45.  } 
  46.  } 
  47.  }.execute(skinPackagePath); 
  48.  } 

這個方法有兩個參數,第一個是皮膚包的路徑,第二個就是一個簡單的回調

其中doInBackground方法里面就實現了動態的去獲取皮膚包的Resources,當獲取成功之后,在onPostExecute方法中就將這個Resources賦值到我們定義好的變量中去,以方便我們之后的使用,注意到當獲取到的這個Resources不為空時,也就是我們已經獲取到了皮膚包里面的資源,我們就調用notifySkinUpdate()這個方法來通知界面去更改皮膚,如果為空就還是使用默認的皮膚。

我們來看看notifySkinUpdate()的實現

網易云音樂、手機QQ的換膚是怎么做到的

這里很簡單,就是去遍歷mSkinObservers這個集合,然后去通知更新。對于ISkinUpdate是一個接口,每個需要皮膚更新的Activity都需要去實現這個接口。

SkinManager這個類里面還有諸如getColor(int resId)、getDrawable(int resId)這樣的方法,就是去獲取第三方包對應的資源文件,值得注意的是如果你的第三方包里沒有對應的資源文件,那么就會使用默認的資源文件,如果你有需求,你完全可以去添加一些類似getMipmap(int resID)這樣的方法。

對了,還有一個比較重要的方法忘了講

網易云音樂、手機QQ的換膚是怎么做到的

這個方法就是恢復到系統的默認主題,原理和load都差不多,實現還簡單了很多。SkinManager這個類就說這么多,詳細實現請到源碼中去查看,很多地方我都給了注釋。

我們再來看看SkinInflaterFactory,在這里面主要就是做一些填充View相關的一些工作。我實現的是LayoutInflaterFactory這個接口而不是文章之前提到的LayoutInflater.Factory這個接口是因為這里需要與AppCompatActivity兼容,如果你還是用之前的那個就會出現一些錯誤,反正我剛弄的時候是折騰了很久的。不管怎么樣原理始終是一樣的。SkinInflaterFactory的作用就是去搜集那些有需要響應皮膚更改的View。 我們來看看onCreateView的實現

網易云音樂、手機QQ的換膚是怎么做到的

首先我們先去判斷這個當前將要View是否有更改皮膚的需求,如果沒有我們就返回默認的實現。如果有,我們就自己去處理 來看看createView方法的實現

網易云音樂、手機QQ的換膚是怎么做到的

看起來很多,其實這個方法就是去動態的去創建View。

下面來看看parseSkinAttr的實現:

網易云音樂、手機QQ的換膚是怎么做到的

這個方法其實就是去搜集View中換膚的時候可以更改的屬性,當我們換膚的時候就是去更改的這些屬性的值,這里你必須要注意一點,這個屬性的值一定要是引用類型的(例如:@color/red),千萬不能寫死,第二個if的判斷就是這個作用。到這里可能你就會有個疑問,我怎么知道哪些屬性在換膚的時候需要更改。如果你細心一點肯定注意到了這行代碼

  1. SkinAttr mSkinAttr = AttrFactory.get(attrName, id, entryName, typeName); 

這里有個AttrFacory他的作用就是根據屬性名,動態的去創建SkinAttr。在AttrFacory中定義了一些類似于這樣的常量:

網易云音樂、手機QQ的換膚是怎么做到的

這就是我們換膚的時候可以更改的那些屬性。SkinAttr是一個抽象類,比如background就會去創建一個BackgroundAttr,本項目所用到的屬性全都在attr包中。SkinAttr是比較靈活的一個地方,如果你有哪個屬性在換膚的時候需要更改,你就去實現一個對應的SkinAttr。

在parseSkinAttr這個方法的最后我們將View和SkinAttr封裝成了一個SkinItem然后添加到一個集合中去,最后還需注意的是,如果當前皮膚不是默認皮膚,一定要去apply一下,這樣做主要是防止換了皮膚啟動一些新的頁面有可能導致換膚不及時的問題。SkinInflaterFactory這個類里面還提供了動態的添加SkinItem的方法,原理都和這里差不多,我就不過多的去說了。

load包里面的這兩個類講的差不多了,這里看懂了后面的內容也就是小菜一碟了,我相信你看了這里再去看源碼一定會輕松地多。

2.base包

網易云音樂、手機QQ的換膚是怎么做到的

可以看見這個包里面肯定就是Activity、Fragment、Application的實現,作用肯定就是封裝一些公用的方法和屬性在里面。

下面我們一個一個來分析

SkinBaseApplication:

可以看到這里我們對SkinManager做了一些初始化的操作。以后我們有需要皮膚更改需求的應用一定要記得一定要繼承于SkinBaseApplication。

SkinBaseActivity 我們來看看其onCreate方法

網易云音樂、手機QQ的換膚是怎么做到的

在這里使用了我們之前自定義的View的InflaterFactory,來替換默認的Factory。記住一定要在super.onCreate(savedInstanceState);這個方法之前調用。SkinBaseActivity里面還提供了動態添加可以響應皮膚更改需求的View的相關方法。當然需要響應換膚更改的Activity都需要繼承SkinBaseActivity。詳細實現請看源碼。

SkinBaseFragment 這個和SkinBaseActivity的思想差不多。具體實現看源碼,這里我只是給大家提供這個換膚框架的思想,讓大家在看源碼的時候更輕松。

這個框架就介紹到這,下面我們來看看怎么去使用。

在使用的時候一定要記得要Activity要去繼承于SkinBaseActivity,Fragment要繼承于SkinBaseFragment,Application要繼承于SkinBaseApplication。當然把這個框架做為你的項目依賴項肯定是必不可少的。為了Demo的簡單,這里我只使用了下面三個顏色作為可以換膚的資源,當然如果你想要使用drawable文件也是可以辦到的,前提是你一定要把這個Demo看懂。

網易云音樂、手機QQ的換膚是怎么做到的

來看一個布局文件

網易云音樂、手機QQ的換膚是怎么做到的

其中 xmlns:skin=”http://schemas.android.com/android/skin“ 是我們自定義的,在SkinConfig有。 我們只需在有皮膚更改需求的View中加入skin:enable=”true” 就OK了。

再來看看MainActicvity的部分代碼

網易云音樂、手機QQ的換膚是怎么做到的

這里就是動態的添加有皮膚更改需求的View。

上面就介紹完了在布局文件中使用方法和在代碼中使用方法。

我們應該怎么去換膚呢?很簡單,只需調用SkinManager的load方法就可以了,把皮膚路徑傳進去就可以了,我的這個Demo為了簡單起見,沒有做在線換膚的功能,只是在本地提供了可以更換的皮膚,看到這里我相信你對怎樣在線換膚已經有想法了。

網易云音樂、手機QQ的換膚是怎么做到的

最最后我們來看看怎么去開發皮膚包。其實這個是最簡單的,皮膚包實際上就是一個基本的Android項目,里面不包含類文件,只有資源文件。這里只需注意 這里的資源文件名字一定要和原項目中的相同,并且只用包含那些在皮膚更改時需要改變的那些就行了!例如我的這個Demo就只是簡單對上面的三種顏色做了簡單的切換。開發了棕色和黑色兩款皮膚,所以資源文件中只有三個color的值,開發完成之后我們需要將其打包成apk文件,為防止用戶點擊安裝,我們將其后綴改成了skin,這樣做也具有標識性。如果還是不太清楚可以直接去源碼中查看。

這下再來看一看文章開頭效果圖是不是突然變得有思路了,快動起你的小手指去敲一個主題換膚的框架吧~~~

 

責任編輯:未麗燕 來源: 安卓巴士
相關推薦

2013-08-02 13:30:02

蘋果保秘

2013-03-04 10:57:01

網易云音樂

2021-10-26 15:33:07

區塊鏈安全加密算法

2014-10-10 16:04:01

網易云音樂Mac版

2023-06-12 07:44:21

大數據數據治理

2023-11-14 07:16:51

冷啟動技術推薦系統

2021-05-26 10:21:31

Python音樂軟件包

2022-12-12 08:00:00

人工智能網易云音樂算法平臺研發

2018-07-13 18:52:20

華為云Forrester報告

2023-02-06 17:38:34

低延遲

2015-06-11 11:18:04

友盟精準推送

2019-12-06 14:07:07

系統緩存架構

2015-09-20 16:07:38

惡意代碼病毒XcodeGhost

2017-03-24 18:38:40

互聯網

2013-05-13 11:12:22

云音樂云應用

2019-01-07 17:17:27

設計直播創新

2017-03-24 17:55:47

互聯網

2018-01-16 15:02:03

微信

2016-03-22 14:00:06

數據安全數據庫
點贊
收藏

51CTO技術棧公眾號

精品国模一区二区三区欧美 | 欧美日韩在线三区| 在线日韩欧美视频| 国产免费xxx| 亚洲欧美视频在线播放| 日韩精品系列| 在线免费观看亚洲| 久久久久久电影| 久久久久国产一区二区三区| 网站一区二区三区| 深夜福利免费在线观看| 免费观看成人av| 一本色道久久88精品综合| 奇米视频7777| 欧美69xxx| 麻豆久久一区二区| 中文日韩电影网站| 天天干天天爽天天射| 成人全视频高清免费观看| 国产日韩1区| 日韩成人久久久| av女优在线播放| 亚洲老妇色熟女老太| 午夜欧美视频| 日韩精品专区在线| 国产制服91一区二区三区制服| 中国黄色一级视频| 97精品视频在线看| 欧美精品日日鲁夜夜添| 色呦呦网站入口| av一区二区三| 国内精品久久久久久久影视蜜臀| 精品国产三级a在线观看| 色欲色香天天天综合网www| 3d成人动漫在线| 国产原创一区二区三区| 久久视频在线播放| 日本美女视频一区| 在线观看欧美日韩电影| 91美女在线观看| 欧美一区在线直播| 性猛交ⅹxxx富婆video| 国产精品第一| 亚洲欧美日本在线| 国产成人av一区二区三区| 日韩欧美中文字幕一区二区| 一区二区三区日本久久久| 在线亚洲人成电影网站色www| 色播五月综合| 国产美女永久免费| 欧美日本中文| 国产婷婷成人久久av免费高清| 日韩中文字幕免费在线| 免费超碰在线| 中文乱码免费一区二区| 亚洲综合中文字幕在线观看| 日本一区二区不卡在线| 免费视频国产一区| 制服丝袜中文字幕一区| 日韩五码在线观看| 一二三四区在线观看| 99久久99久久综合| 国产欧美在线看| 日韩免费观看一区二区| 欧美三区在线| 韩剧1988免费观看全集| 国产精品一二三区在线观看| 久久gogo国模啪啪裸体| 日韩一级在线观看| 免费高清在线观看免费| 毛片在线看网站| **网站欧美大片在线观看| 狠狠色伊人亚洲综合网站色| 亚洲香蕉在线视频| 极品av少妇一区二区| 在线精品播放av| 日本成人精品视频| 欧美成人基地| 欧美一级黄色大片| 永久免费看片在线观看| 91国内外精品自在线播放| 欧美性大战久久久久久久蜜臀| 男女裸体影院高潮| 久久大胆人体| 国产精品无码永久免费888| 一本久道久久综合狠狠爱亚洲精品| 免费av网站观看| 蜜臀va亚洲va欧美va天堂| 亚洲精品欧美日韩| 熟妇高潮一区二区高潮| 国产成人亚洲精品狼色在线| 国产在线视频2019最新视频| www.狠狠干| 国产麻豆视频一区| 成人国产精品久久久久久亚洲| 无码免费一区二区三区| 亚洲作爱视频| 欧美激情一区二区三区在线视频观看 | 黄瓜视频免费观看在线观看www| av片在线观看网站| 精品magnet| 嫩草影院中文字幕| 麻豆av在线免费看| 精品久久久久国产| 亚洲精品中文字幕乱码无线| 久久精品国产福利| 欧美性猛交xxxxxx富婆| 免费黄色在线播放| 国产一区二区在线观| 日韩三级一区| 午夜精品免费| 国产99视频在线观看| 国产精品1000| 伊人精品视频| 国产日产亚洲精品| 亚洲欧美一区二区三| av福利精品导航| 国产日韩精品推荐| 亚洲国产999| 中文字幕电影一区| r级无码视频在线观看| **日韩最新| 亚洲性日韩精品一区二区| 日韩免费成人av| 91久久中文| 欧美在线视频网| av毛片在线免费观看| 国产69精品久久久久毛片 | 国产日韩av网站| 日韩黄色三级| 中文字幕日韩专区| 黄色片中文字幕| 老司机精品导航| 国产精品大片wwwwww| 天天干天天操天天操| 久久99热这里只有精品| 91日本在线观看| 国产黄色大片网站| 中文字幕一区视频| 久草视频这里只有精品| 99久久999| 色哟哟网站入口亚洲精品| 无码黑人精品一区二区| 在线成人av| 97视频热人人精品| 日韩国产福利| 亚洲va韩国va欧美va| 成人午夜激情av| 日韩在线你懂得| 一区二区三区www| 久久久久在线视频| 久久久亚洲高清| 成人精品小视频| 成人精品视频| 欧美激情亚洲国产| www.com在线观看| 亚洲午夜激情网页| 91看片就是不一样| 日韩视频一二区| 亚洲欧美精品一区| 三级影片在线看| 久久亚洲图片| 日韩资源av在线| 久久免费电影| 亚洲国产一区二区三区在线观看| 免费黄色片网站| 久久99精品久久久久久久久久久久 | 免费av网站观看| 色婷婷精品久久二区二区蜜臂av| 四季av一区二区三区| 色婷婷亚洲mv天堂mv在影片| 欧美精品videos另类日本| 亚洲狼人综合网| 欧美日韩一二三四五区| 自拍一级黄色片| 精品国产欧美日韩| 国内精品久久久久伊人av| 这里只有精品6| 日韩毛片精品高清免费| 人妻无码久久一区二区三区免费| 成人福利免费在线观看| 精品国产美女在线| 国产精品人人人人| 国产成人精品一区二区三区四区| 福利视频一区二区三区四区| 国产免费久久| 欧洲s码亚洲m码精品一区| 成年人免费在线视频| 91精品一区二区三区在线观看| 免费在线观看日韩| 国产一区二区电影| 久久久久久久久久久99| 88久久精品| 久久99精品久久久久久噜噜| 亚洲天天综合网| 亚洲国产视频直播| a级黄色免费视频| 老司机免费视频久久| 国产又爽又黄ai换脸| 日本福利一区| 91网站免费看| 日韩电影av| 亚洲人成77777在线观看网| 国产精品第108页| 国产精品乱码久久久久久| 另类小说第一页| 亚洲国产免费| 偷拍盗摄高潮叫床对白清晰| 免费视频亚洲| 韩国成人av| 日韩成人精品| 国产精品丝袜高跟| jizz日韩| 日韩激情片免费| 精品美女www爽爽爽视频| 欧美性生交片4| 狠狠人妻久久久久久综合| 亚洲专区一二三| 午夜影院福利社| 1024日韩| 丰满人妻一区二区三区53号| 亚洲电影一区| 国产一区欧美二区三区| 欧美日韩免费看片| 国外成人在线视频| 新版中文在线官网| 亚洲第一福利网| 日韩精品在线免费视频| 国产亚洲欧洲一区高清在线观看| 男女视频一区二区三区| 欧美激情五月| 99视频精品全部免费看| 欧美3p视频| 亚洲欧美成人一区| 2020最新国产精品| 亚洲自拍偷拍第一页| 在线视频成人| 成人激情免费在线| 四虎国产精品永久在线国在线| 国产精品福利网站| 一二区成人影院电影网| 日韩亚洲欧美成人| www黄在线观看| 国产亚洲视频在线| 国产专区在线播放| 日韩午夜在线影院| 国产ts人妖调教重口男| 欧美男同性恋视频网站| 亚洲天堂777| 欧美另类久久久品| 国产精品一级视频| 欧美性猛交xxxx免费看| 国产又粗又长又硬| 欧美国产一区视频在线观看| 成年人看片网站| 国产精品99久久久久久久vr| 91av免费观看| 国产91丝袜在线观看| 手机在线播放av| www.日韩大片| 播金莲一级淫片aaaaaaa| 久久精品视频在线免费观看| x88av在线| 亚洲欧美日韩一区| 久久无码精品丰满人妻| 国产精品少妇自拍| 久久久精品少妇| 久久尤物电影视频在线观看| av噜噜在线观看| 久久国产成人| 成人毛片100部免费看| 午夜精品视频| 波多野结衣家庭教师在线| 一区二区三区在线| 日韩一区二区三区资源| 97精品97| 久久久久久久香蕉| 99av国产精品欲麻豆| 浓精h攵女乱爱av| 国产美女一区二区| 欧美精品欧美极品欧美激情| 精品在线视频一区| 男人的天堂免费| 97精品久久久午夜一区二区三区| 婷婷色一区二区三区| 亚洲四区在线观看| 久久久精品免费看| 欧美三级三级三级| 免费国产羞羞网站视频| 国产亚洲美女精品久久久| 3d玉蒲团在线观看| 91成人精品网站| 成人超碰在线| 精品中文字幕在线观看| 345成人影院| 午夜伦理精品一区| 九九热线视频只有这里最精品| 成人久久18免费网站图片| 久久婷婷国产| 国产伦一区二区三区色一情| 国产精品视频一区二区三区综合 | 欧美国产在线电影| √新版天堂资源在线资源| 欧美激情精品久久久久久变态 | 色综合久久久久久久| av男人天堂av| 在线观看日韩欧美| 中文字幕乱码中文乱码51精品| 亚州国产精品久久久| 欧洲精品久久久久毛片完整版| 久久福利电影| 久久99高清| 免费高清一区二区三区| 在线国产精品一区| 一区二区三区四区毛片| 久久久精品天堂| 日韩免费一二三区| 欧美福利一区二区| av资源种子在线观看| 538国产精品一区二区免费视频 | 污污视频网站在线免费观看| 午夜久久久久久久久| 国产高清在线免费| 久久精品亚洲一区| 最新日本在线观看| 国产美女搞久久| 欧美色就是色| 欧洲av无码放荡人妇网站| 99国产一区二区三精品乱码| 欧美精品色哟哟| 91精品国产入口在线| 成人久久久精品国产乱码一区二区 | 久久精品影视大全| 久久一日本道色综合| 日本学生初尝黑人巨免费视频| 日韩一二在线观看| 1769免费视频在线观看| 91成人理论电影| 中文在线日韩| 无套白嫩进入乌克兰美女| 综合久久久久久| 91精品国产色综合久久不8| 欧美一二三在线| 巨大荫蒂视频欧美大片| 国内精品免费午夜毛片| av综合网址| 免费看欧美黑人毛片| 成人黄色在线网站| 人妻aⅴ无码一区二区三区| 五月激情六月综合| 全国男人的天堂网| 性金发美女69hd大尺寸| 国产精品宾馆| 亚洲欧美日韩在线综合| 日韩二区三区四区| 日本少妇一级片| 一卡二卡欧美日韩| 黄色小视频免费在线观看| 久久久久久久香蕉网| 久久成人福利| 男女午夜激情视频| 日本一区二区视频在线| 夜夜嗨aⅴ一区二区三区| 久久久精品2019中文字幕神马| 精品午夜av| 亚洲国产成人精品无码区99| 久久精品一二三| 一级全黄少妇性色生活片| 欧美成人性生活| 依依综合在线| 亚洲激情一区二区| 国产一区不卡视频| 国产精品成人av久久| 亚洲视频欧洲视频| 先锋影音网一区二区| 国产小视频免费| 久久天堂av综合合色蜜桃网| 中文亚洲av片在线观看| 欧美成人免费在线观看| 欧美午夜寂寞| 亚洲天堂国产视频| 亚洲制服欧美中文字幕中文字幕| 瑟瑟在线观看| 成人激情视频在线播放| 亚洲人成免费| 久久久久亚洲av无码a片| 91精品婷婷国产综合久久竹菊| 制服丝袜在线播放| 快播亚洲色图| 午夜一级久久| 182在线视频| 欧美日韩成人综合天天影院| 国产专区在线播放| 亚洲r级在线观看| 国产精品一二| 9999热视频| 亚洲天堂男人天堂| 日韩精品一区二区三区免费视频| 日韩手机在线观看视频| 亚洲一区二区三区免费视频|