亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

分析Android App中內(nèi)置換膚功能的實(shí)現(xiàn)方式

2020-01-02 07:03:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Android平臺(tái)api沒(méi)有特意為換膚提供一套簡(jiǎn)便的機(jī)制,這可能是外國(guó)的軟件更注重功能和易用,不流行換膚。系統(tǒng)不提供直接支持,只能自行研究。
換膚,可以認(rèn)為是動(dòng)態(tài)替換資源(文字、顏色、字體大小、圖片、布局文件……)。這個(gè)使用編程語(yǔ)言來(lái)動(dòng)態(tài)設(shè)置是可以做到的,例如使用View的setBackgroundResource、setTextSize、setTextColor等函數(shù)。但我們不可能在每個(gè)activity里對(duì)頁(yè)面里的所有控件都通過(guò)調(diào)用這些函數(shù)來(lái)?yè)Q膚,這樣的程序代碼難以維護(hù)、擴(kuò)展,也違背了UI和代碼分離的原則(android開(kāi)發(fā)中UI以xml文件的方式布局)。 通常,皮膚資源會(huì)在主程序apk之外提供,以減少主程序的大小,以及方便隨時(shí)提供新的皮膚擴(kuò)展。
簡(jiǎn)單的來(lái)說(shuō),軟件皮膚包括圖標(biāo)、字體、布局、交互風(fēng)格等,換膚就是換掉皮膚包括的部分或所有資源。

主流應(yīng)用程序換膚方式:
國(guó)內(nèi)有很多的軟件都支持皮膚定制,這也是與國(guó)外軟件重大不同之一,國(guó)外用戶注重社交、郵件等功能,國(guó)內(nèi)用戶則重視音樂(lè)、小說(shuō)、皮膚等功能. 在寫(xiě)這個(gè)換膚系列之前,我也參考了其他人的一些總結(jié). 知識(shí)點(diǎn)比較散,因此我對(duì)其進(jìn)行了整理和進(jìn)一步的優(yōu)化和擴(kuò)展. 當(dāng)然,由于精力有限,部分換膚方式我也只寫(xiě)了主體功能的實(shí)現(xiàn). 如果出現(xiàn)有誤或者不夠詳細(xì)的地方,希望大家提出意見(jiàn)或者自行進(jìn)行擴(kuò)展.
關(guān)于其中提到的幾種主流實(shí)現(xiàn)方式,接下來(lái)的文章里我會(huì)具體提供代碼進(jìn)行解釋, 此次先做一個(gè)整體的概述.
目前主流的換膚從功能上可以劃分幾種實(shí)現(xiàn)方式,

1) 軟件內(nèi)置多個(gè)皮膚,不可由用戶增加或修改:
最低的自由度,軟件實(shí)現(xiàn)相對(duì)于后面的幾種相對(duì)簡(jiǎn)單.
如果你的程序和資源都很小,可以在主程序apk中放入足夠的皮膚資源.
典型應(yīng)用:平板電腦Apad上QQ空間的換膚功能,實(shí)際上只是改變了Activity的背景,或這部分的資源.

2) 官方提供皮膚供下載,用戶可以使用下載的皮膚:

用戶可選擇下載自己喜歡的皮膚,有些玩家會(huì)破解皮膚的定制方法,自己做皮膚使用,或者傳到網(wǎng)上給大家用。
典型應(yīng)用: 墨跡天氣下載的皮膚就是一個(gè)zip格式的壓縮包,在應(yīng)用的時(shí)候把皮膚資源釋放到墨跡天氣應(yīng)用的目錄下,更換皮膚時(shí)新的皮膚資源會(huì)替換掉老的皮膚資源每次加載的時(shí)候就是從手機(jī)硬盤(pán)上讀取圖片,這些圖片資源的命名和程序中的資源的命名保持一致,一旦找不到這些資源,可以選擇到系統(tǒng)默認(rèn)中查找。
這種實(shí)現(xiàn)是直接讀取了外部資源文件,在程序運(yùn)行時(shí)通過(guò)代碼顯示的替換界面的背景資源。
這種方式的優(yōu)點(diǎn)是:皮膚資源的格式定義很隨意可以是zip也可以是自定義的格式,只要程序中能夠解析到資源就行,缺點(diǎn)是需要讀取并解析文件,導(dǎo)致效率上會(huì)比較差.

3) 皮膚資源存在于主程序之類的APK中,即實(shí)現(xiàn)了APK的拆分. 這里類似于瀏覽器與插件的關(guān)系. 當(dāng)考慮應(yīng)用程序需要擴(kuò)展時(shí),則需要采用本方式實(shí)現(xiàn).,這不僅僅體現(xiàn)在換膚的APK中.
典型應(yīng)用: 手機(jī)QQ換膚的實(shí)現(xiàn)方式
Q的皮膚是一個(gè)無(wú)界面APK應(yīng)用,這個(gè)皮膚應(yīng)用中的資源和主程序的資源命名一致,通過(guò)主程序和皮膚程序共享進(jìn)程實(shí)現(xiàn)主程序?qū)ζつw程序中資源的訪問(wèn),在程序運(yùn)行時(shí)通過(guò)代碼顯示指定皮膚資源,缺點(diǎn)是在主程序中每個(gè)activity要增加復(fù)雜的使用哪種皮膚邏輯,優(yōu)點(diǎn)是效率比較快,且使應(yīng)用程序具有了良好的擴(kuò)展性,降低了程序的耦合性. 包括其他類似的擴(kuò)展功能,都可以利用此方式實(shí)現(xiàn).

4) 官方提供皮膚制作工具或方法,用戶可自制皮膚:
大致分為兩種情況:
a. 應(yīng)用程序主列表為一個(gè)GridView,用戶可通過(guò)在設(shè)置中選擇背景的顏色和按鈕的風(fēng)格. 直接進(jìn)行替換即可.
b. 另外一種是有可視化帶向?qū)У墓ぞ?。用戶只要自己找一些圖片、修改文字的字體替換就可以了。用戶可以上傳自制的皮膚,提供其他用戶下載. 一般都是打包為.zip格式的,擴(kuò)展名可由公司需求自定義. 例如墨跡天氣皮膚擴(kuò)展名是mja,搜狗輸入法的皮膚擴(kuò)展名是sga,它們的文件格式實(shí)際上都是zip。之后的應(yīng)用就和第二種換膚方式類似了.
這種方式優(yōu)點(diǎn)是:使用戶有參與感,自由度較高。用戶可根據(jù)自己的喜好定制軟件的皮膚。
      
5) 改寫(xiě)SDK的Resource類:
此處提供一些思路:
在Android系統(tǒng)中,資源主要指圖片和MP3類型的文件,也是用戶UI包含的所有元素。谷歌在設(shè)計(jì)Android系統(tǒng)時(shí),將UI界面和邏輯代碼分開(kāi)組建:界面設(shè)計(jì)通過(guò)XML的形式描述,具體的程序和應(yīng)用邏輯則通過(guò)代碼來(lái)實(shí)現(xiàn);前端工程師只負(fù)責(zé)HTML和CSS的設(shè)計(jì)與架構(gòu),后端工程師則專門考慮JSP和Java的代碼執(zhí)行.
資源訪問(wèn)在Android性能架構(gòu)中處于何種地位?在進(jìn)行Android開(kāi)發(fā)時(shí),開(kāi)發(fā)者經(jīng)常用到Framework提供的資源包Framework.jar與Framework-res.apk,以及與核心資源相關(guān)的組件“Resource Manager”文件系統(tǒng)。
APK本身是一個(gè)簡(jiǎn)單的文件格式,也是一個(gè)壓縮文件包。通過(guò)解壓文件包可以釋放APK文件:首先需要APK的原數(shù)據(jù)Meta INF、Manifest以及RES目錄。一部分包含圖片資源的應(yīng)用,在資源釋放時(shí)也會(huì)用到Layout。
在安裝文件時(shí),系統(tǒng)會(huì)將文件取出、解壓后放在Dalvik Cache中。該緩存下有許多dex文件,當(dāng)用戶打開(kāi)應(yīng)用時(shí)系統(tǒng)會(huì)自動(dòng)加載相應(yīng)的類。在加載過(guò)程中,系統(tǒng)如需訪問(wèn)APK,則需對(duì)其進(jìn)行解壓,這樣通常導(dǎo)致效率較為低下。而如果將dex文件放入Dalvik Cache中,則能夠令加載的效率大大提升。
每個(gè)進(jìn)程都有一份關(guān)于Framework的共享類和共享資源,但物理內(nèi)存空間中的系統(tǒng)級(jí)別資源只有一份。Framework類和資源是只讀的,而Android操作系統(tǒng)設(shè)計(jì)之初并沒(méi)有硬盤(pán)的虛擬內(nèi)存和換進(jìn)換出機(jī)制,所以節(jié)省內(nèi)存空間是非常重要的工作。

應(yīng)用程序內(nèi)置資源實(shí)現(xiàn)換膚功能
通過(guò)應(yīng)用程序內(nèi)置資源實(shí)現(xiàn)換膚,典型的應(yīng)用為QQ空間中換膚的實(shí)現(xiàn). 應(yīng)用場(chǎng)景為: 應(yīng)用一般不大,且頁(yè)面較少,風(fēng)格相對(duì)簡(jiǎn)單,一般只用實(shí)現(xiàn)部分資源或者只用實(shí)現(xiàn)背景的更換.
此種換膚方式實(shí)現(xiàn)的思路:
1. 把幾套皮膚放在res/drawable目錄里,然后用SharedPreferences來(lái)記錄當(dāng)前皮膚的資源id.然后在程序啟動(dòng)時(shí)加載Activity背景。
2. 主要的實(shí)現(xiàn)在皮膚管理器SkinManager類中. 將皮膚資源的ID加入集合中. 由該類同一調(diào)度皮膚更換,如初始化皮膚,獲取當(dāng)前皮膚符號(hào)以及具體的對(duì)應(yīng)資源的更換皮膚.

接下來(lái)看一下效果圖:

2016226150236420.jpg (370×520)

2016226150259292.jpg (375×519)

內(nèi)置皮膚的實(shí)現(xiàn)相對(duì)比較簡(jiǎn)單,下面直接上代碼:

AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"  package="com.tony.skindemo"  android:versionCode="1"  android:versionName="1.0" >   <uses-sdk android:minSdkVersion="8" />   <application   android:icon="@drawable/ic_launcher"   android:label="@string/app_name" >   <activity    android:label="@string/app_name"    android:name="com.tony.skindemo.SkinDemoActivity" >    <intent-filter >     <action android:name="android.intent.action.MAIN" />      <category android:name="android.intent.category.LAUNCHER" />    </intent-filter>   </activity>        </application>  </manifest> 

布局文件:
main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical" >   <TextView   android:textColor="#ff00ff"   android:text="程序皮膚更換"   android:layout_width="fill_parent"   android:layout_height="wrap_content" /> <RadioGroup   android:id="@+id/skin_options"   android:layout_width="fill_parent"   android:layout_height="wrap_content"    >    <RadioButton    android:layout_weight="1"    android:id="@+id/radioButton1"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="風(fēng)格1" />    <RadioButton    android:layout_weight="1"    android:id="@+id/radioButton2"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="風(fēng)格2" />    <RadioButton    android:layout_weight="1"    android:id="@+id/radioButton3"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="風(fēng)格3" />    <RadioButton    android:layout_weight="1"    android:id="@+id/radioButton4"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="風(fēng)格4" />    <RadioButton    android:layout_weight="1"    android:id="@+id/radioButton5"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="風(fēng)格5" />  </RadioGroup>  </LinearLayout> 

程序主Activity

package com.tony.skindemo;  import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.Window; import android.view.WindowManager; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener;  public class SkinDemoActivity extends Activity {   private SkinSettingManager mSettingManager;  private RadioButton radioButton1;  private RadioButton radioButton2;  private RadioButton radioButton3;  private RadioButton radioButton4;  private RadioButton radioButton5;   @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);    // 取消標(biāo)題欄   requestWindowFeature(Window.FEATURE_NO_TITLE);   // 完成窗體的全屏顯示 // 取消掉狀態(tài)欄   getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,     WindowManager.LayoutParams.FLAG_FULLSCREEN);    setContentView(R.layout.main);   // 初始化皮膚   mSettingManager = new SkinSettingManager(this);   mSettingManager.initSkins();    //通過(guò)單選按鈕設(shè)置皮膚(可自定義更換的方式,如導(dǎo)航欄,也可以加上預(yù)覽功能,此處不再實(shí)現(xiàn))   radioButton1 = (RadioButton) findViewById(R.id.radioButton1);   radioButton2 = (RadioButton) findViewById(R.id.radioButton2);   radioButton3 = (RadioButton) findViewById(R.id.radioButton3);   radioButton4 = (RadioButton) findViewById(R.id.radioButton4);   radioButton5 = (RadioButton) findViewById(R.id.radioButton5);   RadioGroup radioGroup = (RadioGroup) findViewById(R.id.skin_options);   radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {     @Override    public void onCheckedChanged(RadioGroup group, int checkedId) {      switch (checkedId) {     case R.id.radioButton1:      mSettingManager.changeSkin(1);      break;      case R.id.radioButton2:      mSettingManager.changeSkin(2);      break;     case R.id.radioButton3:      mSettingManager.changeSkin(3);      break;     case R.id.radioButton4:      mSettingManager.changeSkin(4);      break;     case R.id.radioButton5:      mSettingManager.changeSkin(5);      break;     default:      break;     }    }   });  }   // 這里為了簡(jiǎn)單實(shí)現(xiàn),實(shí)現(xiàn)換膚  public boolean onTouchEvent(MotionEvent event) {   mSettingManager.toggleSkins();   return super.onTouchEvent(event);  }   } 

皮膚管理器: 
 

import android.app.Activity; import android.content.SharedPreferences;  /**  * 皮膚管理器  * @author tony  *  */ public class SkinSettingManager {    public final static String SKIN_PREF = "skinSetting";    public SharedPreferences skinSettingPreference;    private int[] skinResources = { R.drawable.default_wallpaper,    R.drawable.wallpaper_c,R.drawable.wallpaper_d,R.drawable.wallpaper_f,    R.drawable.wallpaper_g  };    private Activity mActivity;      public SkinSettingManager(Activity activity) {   this.mActivity = activity;   skinSettingPreference = mActivity.getSharedPreferences(SKIN_PREF, 3);  }    /**   * 獲取當(dāng)前程序的皮膚序號(hào)   *   * @return   */  public int getSkinType() {   String key = "skin_type";   return skinSettingPreference.getInt(key, 0);  }   /**   * 把皮膚序號(hào)寫(xiě)到全局設(shè)置里去   *   * @param j   */  public void setSkinType(int j) {   SharedPreferences.Editor editor = skinSettingPreference.edit();   String key = "skin_type";      editor.putInt(key, j);   editor.commit();  }    /**   * 獲取當(dāng)前皮膚的背景圖資源id   *   * @return   */  public int getCurrentSkinRes() {   int skinLen = skinResources.length;   int getSkinLen = getSkinType();   if(getSkinLen >= skinLen){    getSkinLen = 0;   }      return skinResources[getSkinLen];  }    public void toggleSkins(){      int skinType = getSkinType();   if(skinType == skinResources.length - 1){    skinType = 0;   }else{      skinType ++;   }   setSkinType(skinType);   mActivity.getWindow().setBackgroundDrawable(null);   try {    mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());   } catch (Throwable e) {    e.printStackTrace();    }        }     /**   * 用于初始化皮膚   */  public void initSkins(){    mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());  }   /**   * 隨即切換一個(gè)背景皮膚   */  public void changeSkin(int id) {      setSkinType(id);   mActivity.getWindow().setBackgroundDrawable(null);   try {    mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());   } catch (Throwable e) {    e.printStackTrace();   }  }  } 

就這樣,通過(guò)程序內(nèi)置皮膚的基本功能完成了.若想在自己的應(yīng)用中實(shí)現(xiàn),仍需注意以下幾點(diǎn)(實(shí)現(xiàn)起來(lái)并不復(fù)雜,此處不再寫(xiě)具體實(shí)現(xiàn)):
1.  實(shí)現(xiàn)多個(gè)activity的更換皮膚. 需要利用自定義MyApplication類,繼承自Application. 并加入activity的集合屬性.用于存儲(chǔ)應(yīng)用所有的activity。修改SkinManager,在更換皮膚時(shí),從application中取出該集合,進(jìn)行遍歷并更換皮膚。
2.可以優(yōu)化用戶體驗(yàn),通過(guò)導(dǎo)航欄方式進(jìn)入更換皮膚界面,并可以加入預(yù)覽功能,當(dāng)確定修改配置后,才完成更換皮膚功能.
3. 加入style.theme等資源,實(shí)現(xiàn)更加復(fù)雜的皮膚更換. 具體實(shí)現(xiàn)同更換背景.
 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
影音先锋久久| 国产一区日韩二区欧美三区| 国产精品扒开腿做爽爽爽视频软件| 国产欧美久久久精品免费| 日韩欧美美女一区二区三区| 精精国产xxxx视频在线| 国产乱码在线观看| 亚洲欧美日韩综合在线| 亚洲国产精品一区二区三区| 亚洲一区在线观看免费观看电影高清| 中文字幕亚洲色图| 一级片在线免费看| 麻豆精品国产传媒mv男同| 国产高清在线a视频大全| 在线看福利67194| 一级在线免费观看| 日韩少妇高潮抽搐| 在线免费视频一区| 亚洲aa在线观看| 韩国无码一区二区三区精品| 欧美一站二站| 91视频最新地址| 国产精品人成电影在线观看| 国产精品x453.com| 亚洲精品午夜久久久| 97人人做人人人难人人做| 91短视频在线| 在线免费观看黄色小视频| 日韩大片免费观看视频播放| 黄页免费在线观看视频| 精品国产一二| av免费观看大全| 免费精品99久久国产综合精品应用| 成人免费观看在线观看| 海角社区69精品视频| 日韩在线视频网站| 美女一区视频| 欧美成人免费全部网站| 色姑娘综合av| 国产综合无码一区二区色蜜蜜| 久久久久88色偷偷| 在线免费观看不卡av| 四虎成人精品在永久免费| 国产日韩在线播放| 日本中文字幕在线2020| 国产精品久久激情| 黄色三级视频在线播放| 日本黄色大片视频| 中文字幕亚洲一区二区三区五十路| 欧美色婷婷久久99精品红桃| 久久伊人精品天天| 69视频在线播放| 亚洲一区二区三区精品在线观看| 浮妇高潮喷白浆视频| 奇米色在线视频| 国产成人精品一区二区三区网站观看| 色综合天天性综合| 7777精品伊人久久久大香线蕉的| 亚洲综合精品视频| 欧美一级午夜免费电影| 欧美精品一线| 欧洲精品一区二区三区| 在线免费看毛片| 色一区二区三区| 成人动漫一区二区在线| 亚洲日本在线看| 精品伦理精品一区| 国产91在线观看丝袜| 欧美少妇一区二区| 国产午夜在线观看| 国产无套精品一区二区三区| 国产亚洲精品久久久久动| 久草在线免费资源| 日本高清视频免费在线观看| 久久精品视频在线观看| 久久亚洲精品视频| 麻豆免费精品视频| 99九九99九九九视频精品| 中国成人亚色综合网站| 日韩精品――中文字幕| 蜜桃视频在线观看www社区| 日本大胆欧美| 亚洲同志男男gay1069网站| 亚洲精品精品一区| 日韩欧美色视频| 极品少妇一区二区三区精品视频| 色综合久久五月| 免费国产自线拍一欧美视频| 国产成人在线观看网站| 在线码字幕一区| 欧美激情亚洲| 四虎永久在线观看| 亚洲一区二区三区四区视频| 蜜臀av.com| 日韩欧美不卡在线观看视频| 久久99久久精品国产| 日韩欧美一区二区三区在线| 小草av在线播放| 黄色三级中文字幕| 久久97精品久久久久久久不卡| 日韩中文视频免费在线观看| 九九精品在线播放| 交换国产精品视频一区| 久久99热只有频精品91密拍| 成人激情免费网站| 色妞www精品视频| 天天舔天天干| 任我爽精品视频在线播放| 伊人蜜桃色噜噜激情综合| 日韩一卡二卡在线| 日本24小时在线高清视频| 成人av在线亚洲| 欧美主播一区二区三区美女| 成人高潮a毛片免费观看网站| 欧美videos另类精品| 一区二区三区精品久久久| 黄色免费视频| 在线中文字幕一区二区| 男人的天堂视频在线| 国产精品一区二区在线| 久久成人亚洲| 亚州成人在线电影| 国产高清在线精品一区二区三区| 一区二区伦理片| 亚洲成人福利片| 日韩大片在线| 成人在线不卡| 日韩欧美资源站| 一区二区三区免费在线视频| 日本视频中文字幕一区二区三区| 日韩欧美的一区二区| 色老头一区二区三区在线观看| 视频三区在线观看| 亚洲成人av福利| 精油按摩中文字幕久久| 在线看国产日韩| 美女被久久久| 精品国产乱码久久久久久婷婷| 色av综合在线| 最近免费观看高清韩国日本大全| 在线播放色视频| 欧美极品美女电影一区| 影音先锋亚洲精品| 国产成人亚洲欧美电影| www高清在线视频日韩欧美| 亚洲中文字幕一区| 三年片大全在线观看大全有哪些| 久久久人成影片免费观看| 99re6热在线精品视频播放| 91亚洲精品在看在线观看高清| 亚洲另类图片另类电影| 欧美午夜精品一区二区| 欧美韩国日本| 亚洲免费电影一区| 亚洲最黄网站| 久久机热这里只有精品| 国产精品午夜免费| 96sao在线精品免费视频| 日韩av中文在线观看| 国产日韩精品一区| 天堂av在线网| 91精品国产欧美一区二区18| 国产高清一区二区三区| 亚洲精品在线免费观看视频| 日产精品久久久一区二区福利| 伊人精品一区| 僵尸再翻生在线观看| 国产精品狼人久久影院观看方式| 日韩a级大片| 亚洲人在线播放| 国产精品一区二区x88av| 成人综合婷婷国产精品久久| 最近中文字幕免费mv视频多少集| 国产亚洲精品美女久久久m| 国产免费一级片| 成年人看的免费视频| 天天操天天摸天天爽| 亚洲不卡在线| 午夜免费在线观看精品视频| 日韩精品一区二区亚洲av| 中文字幕久热精品视频免费| 日韩啪啪网站| 最近中文字幕mv免费高清视频8| 四虎免费av| 亚洲女人天堂在线| 亚洲国产精品区| 四虎影视1304t| 免费黄色a级片| 免费观看的av网站| 亚洲精品黄网在线观看| 亚洲爆乳无码专区| 久久久久久久国产精品视频| 国产无码精品久久久| 久久精品国产亚洲精品2020| 美女福利视频在线| 国产精品每日更新在线播放网址| 久久婷婷综合中文字幕| 亚洲国产日韩欧美在线99| 26uuu久久综合| 成人日韩av| 成人妇女免费播放久久久| 黑人巨大精品欧美| 欧美日韩亚洲精品一区二区三区| 136导航精品福利| 亚洲精品7777| 亚洲欧洲午夜一线一品| 最新二区三区av| 超污视频在线播放| 日韩欧美999| 91精品综合久久久久久五月天| 男女激情视频网站| 国产精品久久久久久久久电影网| 色婷婷av一区二区三区丝袜美腿| 91精品91久久久中77777老牛| 欧美性猛交xxxxbbbb| 国内激情视频在线观看| www.中文字幕在线观看| 精品久久中文字幕久久av| 98国产高清一区| 国产高清精品二区| 久久久久久久久久99| 国产区在线视频| 久久综合九色综合欧美98| 秋霞欧美在线观看| 国产精品高清一区二区三区| 精品伦理精品一区| 成人毛片在线播放| bl视频在线免费观看| 亚洲不卡视频在线观看| 另类中文字幕国产精品| 精品av久久久久电影| 精品欧美一区二区在线观看| 亚洲va在线va天堂成人| 日本在线一区二区三区| 色先锋影音岛国av资源| 久久人人爽人人| 一本一道久久a久久精品逆3p| 亚洲欧洲一区二区天堂久久| 日韩欧美色电影| 18欧美亚洲精品| 日本一区二区久久精品| 亚洲一区精品在线| 国产高潮流白浆喷水视频| 欧美三区在线观看| 久久综合久久综合久久| 久久久久久久久久婷婷| 色欧美88888久久久久久影院| 2020欧美日韩在线视频| 秋霞在线观看一区二区三区| 亚洲欧美日韩一区在线观看| ga∨成人网| 免费在线稳定资源站| 91成人天堂久久成人| 97人人澡人人爽人人模亚洲| 无码免费一区二区三区免费播放| 黄色成人在线网| 欧美日韩精品在线| aⅴ色国产欧美| 先锋亚洲精品| 国产精品高清在线观看| 男人的天堂影院| www.日本三级| 狂野欧美性猛交xxxxx视频| 三上悠亚激情av一区二区三区| 香蕉视频在线免费看| 欧美最猛性xxxxx直播| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲va欧美va人人爽| 欧亚在线中文字幕免费| 可以在线看的av网站| 国产精品沙发午睡系列| 国产欧美三级电影| 久久久亚洲一区| 日韩电影在线视频| 亚洲国产精品av| 久久在线91| 色五月激情五月| 日本不卡一区二区三区| 99re热精品| 亚洲熟妇无码另类久久久| 日本高清不卡的在线| 国产日产一区二区| 欧美日韩另类视频| 亚洲精选一区二区三区| 国产精品久久久久久久久久久久久久久久久久| 亚洲欧美电影院| 久久精品日产第一区二区三区精品版| 高清shemale亚洲人妖| 中文字幕视频一区二区三区久| 男人舔女人下面高潮视频| 国产影视一区| 在线成人h网| 成年网站在线免费观看| 国产人妖在线播放| 国产私人尤物无码不卡| 蜜臀av一区| 水蜜桃色314在线观看| 全亚洲最色的网站在线观看| 麻豆91在线看| 亚洲精品电影在线观看| 996久久国产精品线观看| 精品日产免费二区日产免费二区| 头脑特工队2在线播放| 极品尤物av丝袜美腿在线观看| 亚洲精品国产福利| 日韩激情小视频| 色婷婷激情五月| 性xxxfreexxxx性欧美| 精品少妇一二三区| 国产美女视频一区二区三区| 色偷偷亚洲男人天堂| 日本dhxxxxxdh14日本| 精品国产乱码久久久久久郑州公司| 性高潮视频在线观看| 国产又黄又猛又爽| 日本在线观看不卡视频| 精品乱子伦一区二区三区| 国产日韩欧美成人| 激情开心成人网| 亚洲乱码国产乱码精品精大量| 制服丝袜中文字幕在线观看| 国产一级片大全| 亚洲天堂av资源在线观看| 国产精品国产精品国产专区不蜜| 中文在线а√在线8| 色噜噜一区二区| 99re91这里只有精品| 99久久国产热无码精品免费|