婷婷精品国产亚洲av麻豆不片_中国成人一级黄色毛片_亚洲国产成人高清影视在线_尤物yw国产午夜精品视频_影音先锋aⅴ资源 中文字幕 少妇_国产成人无码野外_av免费中文字幕在线观看_欧美亚洲综合久久997_在线精品日韩欧美_一级黄色免费高清无码视频

Android開發(fā)網(wǎng)上的一些重要知識(shí)點(diǎn)[經(jīng)驗(yàn)分享]2

文章分類:公司動(dòng)態(tài) 發(fā)布時(shí)間:2013-07-27 原文作者:admin 閱讀( )

看看sdk文檔上的關(guān)于界面圖標(biāo)的詳細(xì)說(shuō)明。 14.Android控件美化Shape你會(huì)用嗎?

如果你對(duì)Android系統(tǒng)自帶的UI控件感覺(jué)不夠滿意,可以嘗試下自定義控件,我們就以Button為例,很早以前Android123就寫到過(guò)Android Button按鈕控件美化方法里面提到了xml的selector構(gòu)造。當(dāng)然除了使用drawable這樣的圖片外今天Android開發(fā)網(wǎng)談下自定義圖形shape的方法,對(duì)于Button控件Android上支持以下幾種屬性shape、gradient、stroke、corners等。   我們就以目前系統(tǒng)的Button的selector為例說(shuō)下:           <shape>
            <gradient
                android:startColor="#ff8c00"
                android:endColor="#FFFFFF"
                android:angle="270" />
            <stroke
                android:width="2dp"
                android:color="#dcdcdc" />
            <corners
                android:radius="2dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>     對(duì)于上面,這條shape的定義,分別為漸變,在gradient中startColor屬性為開始的顏色,endColor為漸變結(jié)束的顏色,下面的angle是角度。接下來(lái)是stroke可以理解為邊緣,corners為拐角這里radius屬性為半徑,最后是相對(duì)位置屬性padding。 對(duì)于一個(gè)Button完整的定義可以為   <?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <gradient
                android:startColor="#ff8c00"
                android:endColor="#FFFFFF"
                android:angle="270" />
            <stroke
                android:width="2dp"
                android:color="#dcdcdc" />
            <corners
                android:radius="2dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>     <item android:state_focused="true" >
        <shape>
            <gradient
                android:startColor="#ffc2b7"
                android:endColor="#ffc2b7"
                android:angle="270" />
            <stroke
                android:width="2dp"
                android:color="#dcdcdc" />
            <corners
                android:radius="2dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>     <item>       
        <shape>
            <gradient
                android:startColor="#ff9d77"
                android:endColor="#ff9d77"
                android:angle="270" />
            <stroke
                android:width="2dp"
                android:color="#fad3cf" />
            <corners
                android:radius="2dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector> 注意Android123提示大家,以上幾個(gè)item的區(qū)別主要是體現(xiàn)在state_pressed按下或state_focused獲得焦點(diǎn)時(shí),當(dāng)當(dāng)來(lái)判斷顯示什么類型,而沒(méi)有state_xxx屬性的item可以看作是常規(guī)狀態(tài)下。

15. Android開發(fā)者應(yīng)該保持以下特質(zhì)

Android123推薦新手應(yīng)該遵循   1. 深讀SDK文檔   2. 深讀SDK的APIDemo和Samples   3. 掌握GIT開源代碼   4. 多了解Android開源項(xiàng)目,學(xué)習(xí)別人的手法寫程序。

16. Android數(shù)組排序常見(jiàn)方法

  Android的數(shù)組排序方式基本上使用了Sun原生的Java API實(shí)現(xiàn),常用的有Comparator接口實(shí)現(xiàn)compare方法和Comparable接口的compareTo方法,我們對(duì)于一個(gè)數(shù)組列表比如ArrayList可以通過(guò)這兩個(gè)接口進(jìn)行排序和比較,這里Android123給大家一個(gè)例子 private final Comparator cwjComparator = new Comparator() {         private final Collator   collator = Collator.getInstance();
        public final int compare(Object a, Object b) {
            CharSequence  a = ((Item) a).sName;
            CharSequence  b = ((Item) b).sID;
            return collator.compare(a, b);
        }
    }; 我們的ArrayList對(duì)象名為mList,則執(zhí)行排序可以調(diào)用方法 Collections.sort(mList, cwjComparator);

17.Android控件TextProgressBar進(jìn)度條上顯文字

Android系統(tǒng)的進(jìn)度條控件默認(rèn)的設(shè)計(jì)的不是很周全,比如沒(méi)有包含文字的顯示,那么如何在Android進(jìn)度條控件上顯示文字呢? 來(lái)自Google內(nèi)部的代碼來(lái)了解下,主要使用的addView這樣的方法通過(guò)覆蓋一層Chronometer秒表控件來(lái)實(shí)現(xiàn),整個(gè)代碼如下    public class TextProgressBar extends RelativeLayout implements OnChronometerTickListener {
    public static final String TAG = "TextProgressBar";
    static final int CHRONOMETER_ID = android.R.id.text1;
    static final int PROGRESSBAR_ID = android.R.id.progress;
    Chronometer mChronometer = null;
    ProgressBar mProgressBar = null;
    long mDurationBase = -1;
    int mDuration = -1;     boolean mChronometerFollow = false;
    int mChronometerGravity = Gravity.NO_GRAVITY;
    public TextProgressBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }     public TextProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
    }     public TextProgressBar(Context context) {
        super(context);
    }     //Android開發(fā)網(wǎng)提示關(guān)鍵部分在這里     @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        super.addView(child, index, params);
        int childId = child.getId();
        if (childId == CHRONOMETER_ID && child instanceof Chronometer) {
            mChronometer = (Chronometer) child;
            mChronometer.setOnChronometerTickListener(this);
            // Check if Chronometer should move with with ProgressBar
            mChronometerFollow = (params.width == ViewGroup.LayoutParams.WRAP_CONTENT);
            mChronometerGravity = (mChronometer.getGravity() & Gravity.HORIZONTAL_GRAVITY_MASK);
        } else if (childId == PROGRESSBAR_ID && child instanceof ProgressBar) {
            mProgressBar = (ProgressBar) child;
        }
    }     @android.view.RemotableViewMethod
    public void setDurationBase(long durationBase) {
        mDurationBase = durationBase;
        if (mProgressBar == null || mChronometer == null) {
            throw new RuntimeException("Expecting child ProgressBar with id " +
                    "'android.R.id.progress' and Chronometer id 'android.R.id.text1'");
        }
        // Update the ProgressBar maximum relative to Chronometer base
        mDuration = (int) (durationBase - mChronometer.getBase());
        if (mDuration <= 0) {
            mDuration = 1;
        }
        mProgressBar.setMax(mDuration);
    }
    public void onChronometerTick(Chronometer chronometer) {
        if (mProgressBar == null) {
            throw new RuntimeException(
                "Expecting child ProgressBar with id 'android.R.id.progress'");
        }
        // Stop Chronometer if we're past duration
        long now = SystemClock.elapsedRealtime();
        if (now >= mDurationBase) {
            mChronometer.stop();
        }         int remaining = (int) (mDurationBase - now);
        mProgressBar.setProgress(mDuration - remaining);
        if (mChronometerFollow) {
            RelativeLayout.LayoutParams params;
            params = (RelativeLayout.LayoutParams) mProgressBar.getLayoutParams();
            int contentWidth = mProgressBar.getWidth() - (params.leftMargin + params.rightMargin);
            int leadingEdge = ((contentWidth * mProgressBar.getProgress()) /
                    mProgressBar.getMax()) + params.leftMargin;
            int adjustLeft = 0;
            int textWidth = mChronometer.getWidth();
            if (mChronometerGravity == Gravity.RIGHT) {
                adjustLeft = -textWidth;
            } else if (mChronometerGravity == Gravity.CENTER_HORIZONTAL) {
                adjustLeft = -(textWidth / 2);
            }
            leadingEdge += adjustLeft;
            int rightLimit = contentWidth - params.rightMargin - textWidth;
            if (leadingEdge < params.leftMargin) {
                leadingEdge = params.leftMargin;
            } else if (leadingEdge > rightLimit) {
                leadingEdge = rightLimit;
            }
            params = (RelativeLayout.LayoutParams) mChronometer.getLayoutParams();
            params.leftMargin = leadingEdge;
            mChronometer.requestLayout();
        }
    }

18. Android內(nèi)存管理-SoftReference的使用

很多時(shí)候我們需要考慮Android平臺(tái)上的內(nèi)存管理問(wèn)題,Dalvik VM給每個(gè)進(jìn)程都分配了一定量的可用堆內(nèi)存,當(dāng)我們處理一些耗費(fèi)資源的操作時(shí)可能會(huì)產(chǎn)生OOM錯(cuò)誤(OutOfMemoryError)這樣的異常,Android123觀察了下國(guó)內(nèi)的類似Market客戶端設(shè)計(jì),基本上都沒(méi)有采用很好的內(nèi)存管理機(jī)制和緩存處理。   如果細(xì)心的網(wǎng)友可能發(fā)現(xiàn)Android Market客戶端載入時(shí),每個(gè)列表項(xiàng)的圖標(biāo)是異步刷新顯示的,但當(dāng)我們快速的往下滾動(dòng)到一定數(shù)量比如50個(gè),再往回滾動(dòng)時(shí)可能我們看到了部分App的圖標(biāo)又重新開始加載,當(dāng)然這一過(guò)程可能是從SQLite數(shù)據(jù)庫(kù)中緩存的,但是在內(nèi)存中已經(jīng)通過(guò)類似SoftReference的方式管理內(nèi)存。   在Java中內(nèi)存管理,引用分為四大類,強(qiáng)引用HardReference、弱引用WeakReference、軟引用SoftReference和虛引用PhantomReference。它們的區(qū)別也很明顯,HardReference對(duì)象是即使虛擬機(jī)內(nèi)存吃緊拋出OOM也不會(huì)導(dǎo)致這一引用的對(duì)象被回收,而WeakReference等更適合于一些數(shù)量不多,但體積稍微龐大的對(duì)象,在這四個(gè)引用中,它是最容易被垃圾回收的,而我們對(duì)于顯示類似Android Market中每個(gè)應(yīng)用的App Icon時(shí)可以考慮使用SoftReference來(lái)解決內(nèi)存不至于快速回收,同時(shí)當(dāng)內(nèi)存短缺面臨Java VM崩潰拋出OOM前時(shí),軟引用將會(huì)強(qiáng)制回收內(nèi)存,最后的虛引用一般沒(méi)有實(shí)際意義,僅僅觀察GC的活動(dòng)狀態(tài),對(duì)于測(cè)試比較實(shí)用同時(shí)必須和ReferenceQueue一起使用。   對(duì)于一組數(shù)據(jù),我們可以通過(guò)HashMap的方式來(lái)添加一組SoftReference對(duì)象來(lái)臨時(shí)保留一些數(shù)據(jù),同時(shí)對(duì)于需要反復(fù)通過(guò)網(wǎng)絡(luò)獲取的不經(jīng)常改變的內(nèi)容,可以通過(guò)本地的文件系統(tǒng)或數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)緩存,希望給國(guó)內(nèi)做App Store這樣的客戶端一些改進(jìn)建議。

19. 反射在Android開發(fā)中的利弊

由于Android 2.2的推出,很多新的API加入導(dǎo)致很多項(xiàng)目移植需要考慮使用Java的反射機(jī)制Reflection來(lái)動(dòng)態(tài)調(diào)用,動(dòng)態(tài)調(diào)用的好處就是不需要使用引用文件,直接通過(guò)JDK中聲明好的方法直接調(diào)用,本身原理基于JVM的,從Java 1.5開始支持,原理上就是根據(jù)類名而不實(shí)例化對(duì)象的情況下,獲得對(duì)象的方法或?qū)傩远苯诱{(diào)用。   Android開發(fā)時(shí)反射能幫助我們多少?   1. 有些網(wǎng)友可能發(fā)現(xiàn)Android的SDK比較封閉,很多敏感的方法常規(guī)的用戶無(wú)法編譯,我們?nèi)绻戳舜a直接在反射中聲明動(dòng)態(tài)調(diào)用即可。比如很多internal或I開頭的AIDL接口均可以通過(guò)反射輕松調(diào)用。   2. 反射對(duì)于Android123來(lái)說(shuō)更重要的是考慮到應(yīng)用的兼容性,我們目前主要兼容從Android 1.5到2.2的項(xiàng)目,API Level從3到8可以方便的擴(kuò)充,調(diào)用前我們預(yù)留一個(gè)標(biāo)志位聲明該API的最低以及最高的API Level為多少可以調(diào)用。   3. 對(duì)于調(diào)試Java的反射是功臣了,在Logcat中我們可以看到出錯(cuò)的地方肯定有類似java.lang.reflect.XXX的字樣,這種自檢機(jī)制可以幫助我們方便的調(diào)試Android應(yīng)用程序。   反射的缺點(diǎn)有哪些?   1. 因?yàn)槭莿?dòng)態(tài)執(zhí)行的,效率自然沒(méi)有預(yù)編譯時(shí)引用現(xiàn)有的庫(kù)效率高,就像平時(shí)我們Win32開發(fā)時(shí),可以不用h文件,直接通過(guò)GetProcAddress一樣去動(dòng)態(tài)獲取方法的地址。當(dāng)然效率要根據(jù)復(fù)雜程度而決定,一般稍微復(fù)雜的處理性能損失可能超過(guò)20%,對(duì)于一些復(fù)雜的涉及Java自動(dòng)類型轉(zhuǎn)換判斷,執(zhí)行時(shí)間可能是直接引用的上千倍,所以最終我們調(diào)試時(shí)必須考慮性能問(wèn)題。   2. 因?yàn)榉瓷涫莿?dòng)態(tài)的,所以需要處理很多異常,不然Dalvik崩潰出Force Close的概率會(huì)大很多,很簡(jiǎn)單的一個(gè)反射就需要至少3個(gè)異常捕獲,本身try-catch效率就不是很高,自然進(jìn)一步影響運(yùn)行效率,對(duì)于Android開發(fā)我們必須考慮這些問(wèn)題。   3. 反射因?yàn)閷?dǎo)致代碼臃腫,自然稍微復(fù)雜的幾個(gè)方法實(shí)用反射將會(huì)導(dǎo)致代碼可讀性和維護(hù)性降低,如果很抽象的調(diào)用Android開發(fā)網(wǎng)強(qiáng)烈不推薦這種方法。   最后要說(shuō)的是Reflection并不是Java的專利,微軟的.Net也同樣支持,同時(shí)更多的動(dòng)態(tài)語(yǔ)言如Ruby等均支持這一特性。

20.AsyncTask對(duì)比Thread加Handler

很多網(wǎng)友可能發(fā)現(xiàn)Android平臺(tái)很多應(yīng)用使用的都是AsyncTask,而并非Thread和Handler去更新UI,這里Android123給大家說(shuō)下他們到底有什么區(qū)別,我們平時(shí)應(yīng)該使用哪種解決方案。從Android 1.5開始系統(tǒng)將AsyncTask引入到android.os包中,過(guò)去在很早1.1和1.0 SDK時(shí)其實(shí)官方將其命名為UserTask,其內(nèi)部是JDK 1.5開始新增的concurrent庫(kù),做過(guò)J2EE的網(wǎng)友可能明白并發(fā)庫(kù)效率和強(qiáng)大性,比Java原始的Thread更靈活和強(qiáng)大,但對(duì)于輕量級(jí)的使用更為占用系統(tǒng)資源。Thread是Java早期為實(shí)現(xiàn)多線程而設(shè)計(jì)的,比較簡(jiǎn)單不支持concurrent中很多特性在同步和線程池類中需要自己去實(shí)現(xiàn)很多的東西,對(duì)于分布式應(yīng)用來(lái)說(shuō)更需要自己寫調(diào)度代碼,而為了Android UI的刷新Google引入了Handler和Looper機(jī)制,它們均基于消息實(shí)現(xiàn),有事可能消息隊(duì)列阻塞或其他原因無(wú)法準(zhǔn)確的使用。   Android開發(fā)網(wǎng)推薦大家使用AsyncTask代替Thread+Handler的方式,不僅調(diào)用上更為簡(jiǎn)單,經(jīng)過(guò)實(shí)測(cè)更可靠一些,Google在Browser中大量使用了異步任務(wù)作為處理耗時(shí)的I/O操作,比如下載文件、讀寫數(shù)據(jù)庫(kù)等等,它們?cè)诒举|(zhì)上都離不開消息,但是AsyncTask相比Thread加Handler更為可靠,更易于維護(hù),但AsyncTask缺點(diǎn)也是有的比如一旦線程開啟即dobackground方法執(zhí)行后無(wú)法給線程發(fā)送消息,僅能通過(guò)預(yù)先設(shè)置好的標(biāo)記來(lái)控制邏輯,當(dāng)然可以通過(guò)線程的掛起等待標(biāo)志位的改變來(lái)通訊,對(duì)于某些應(yīng)用Thread和Handler以及Looper可能更靈活。

21. Android Drawable疊加處理方法

大家可能知道Bitmap的疊加處理在Android平臺(tái)中可以通過(guò)Canvas一層一層的畫就行了,而Drawable中如何處理呢? 除了使用BitmapDrawable的getBitmap方法將Drawable轉(zhuǎn)換為Bitmap外,今天Android123給大家說(shuō)下好用簡(jiǎn)單的LayerDrawable類,LayerDrawable顧名思義就是層圖形對(duì)象。下面直接用一個(gè)簡(jiǎn)單的代碼表示:     Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.cwj);
    Drawable[] array = new Drawable[3];      array[0] = new PaintDrawable(Color.BLACK); //黑色
     array[1] = new PaintDrawable(Color.WHITE); //白色
     array[2] = new BitmapDrawable(bm); //位圖資源
    LayerDrawable ld = new LayerDrawable(array); //參數(shù)為上面的Drawable數(shù)組
        ld.setLayerInset(1, 1, 1, 1, 1);  //第一個(gè)參數(shù)1代表數(shù)組的第二個(gè)元素,為白色
        ld.setLayerInset(2, 2, 2, 2, 2); //第一個(gè)參數(shù)2代表數(shù)組的第三個(gè)元素,為位圖資源
    mImageView.setImageDrawable(ld);   上面的方法中LayerDrawable是關(guān)鍵,Android開發(fā)網(wǎng)提示setLayerInset方法原型為public void setLayerInset (int index, int l, int t, int r, int b) 其中第一個(gè)參數(shù)為層的索引號(hào),后面的四個(gè)參數(shù)分別為left、top、right和bottom。對(duì)于簡(jiǎn)單的圖片合成我們可以將第一和第二層的PaintDrawable換成BitmapDrawable即可實(shí)現(xiàn)簡(jiǎn)單的圖片合成。

22. onRetainNonConfigurationInstance和getLastNonConfigurationInstance

很多網(wǎng)友可能知道Android橫豎屏切換時(shí)會(huì)觸發(fā)onSaveInstanceState,而還原時(shí)會(huì)產(chǎn)生onRestoreInstanceState,但是Android的Activity類還有一個(gè)方法名為onRetainNonConfigurationInstance和getLastNonConfigurationInstance這兩個(gè)方法。    我們可以通過(guò)  onRetainNonConfigurationInstance 代替 onSaveInstanceState,比如距離2   @Override
  public Object onRetainNonConfigurationInstance()
{    
       //這里需要保存的內(nèi)容,在切換時(shí)不是bundle了,我們可以直接通過(guò)Object來(lái)代替
      return obj;
} 在恢復(fù)窗口時(shí),我們可以不使用 onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。我們可以直接在onCreate中使用,比如   Object obj = getLastNonConfigurationInstance();     最終obj的內(nèi)容就是上次切換時(shí)的內(nèi)容。   這里Android123提醒大家,每次Activity橫豎屏切換時(shí)onCreate方法都會(huì)被觸發(fā)。

23. Android中String資源文件的format方法

很多時(shí)候我們感性Google在設(shè)計(jì)Android時(shí)遵守了大量MVC架構(gòu)方式,可以讓寫公共代碼、美工和具體邏輯開發(fā)人員獨(dú)立出來(lái)。有關(guān)Android的資源文件values/strings.xml中如何實(shí)現(xiàn)格式化字符串呢? 這里Android123舉個(gè)簡(jiǎn)單的例子,以及最終可能會(huì)用到哪些地方。 <?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">cwj_Demo</string> 
    <string name="hello">android開發(fā)網(wǎng)</string> 
</resources>  上面是一段簡(jiǎn)單的字符串資源文件,沒(méi)有用到格式化,因?yàn)楸容^簡(jiǎn)單直接描述了意思,當(dāng)我們?cè)O(shè)計(jì)一個(gè)類似 Delete xxx File ? 的時(shí)候,我們可能需要在Java中動(dòng)態(tài)獲取 xxx 的名稱,所以定義資源時(shí)使用格式化可以輕松解決,不需要一堆String去拼接或StringBuffer一個(gè)一個(gè)append這樣的愚蠢方法,看例子     <string name="alert">Delete %1$s File</string>   這里%1$s代表這是一個(gè)字符串型的,如果是整數(shù)型可以寫為%1$d,類似printf這樣的格式化字符串函數(shù),當(dāng)然如果包含了多個(gè)需要格式化的內(nèi)容,則第二個(gè)可以寫為%2$s或%2$d了,那么最終在Java中如何調(diào)用呢? 看下面的例子:    例一: 整數(shù)型的   <string name="alert">I am %1$d years old</string>  定義的是這樣的    當(dāng)然,我們杜絕意外情況,比如冒出個(gè)secret這樣的string類型的,注意上面是%1$d不是%1$s,所以默認(rèn)標(biāo)準(zhǔn)的合并成為    int nAge=23;    String sAgeFormat = getResources().getString(R.string.alert);     String sFinalAge = String.format(sAgeFormat, nAge);      這樣執(zhí)行完后,就組成了 I am 23 years old,是不是很方便啊.  當(dāng)然了,下面看下String字符串時(shí)的情況.   例二: 字符串型的   String sName="cwj"   String sCity="Shanghai"    資源定義為   <string name="alert2">My name is %1$s , I am form %2$s</string>     則Java中只需要   String sInfoFormat = getResources().getString(R.string.alert2);    String sFinalInfo=String.format(sInfoFormat, sName, sCity);    我們看到了整個(gè),整個(gè)定義類似MFC的CString::Format或Mac OS中的NSLog,但是需要顯示類似C#中那樣顯示的標(biāo)出參數(shù)的數(shù)字,比如%1或%n,這里數(shù)字代表參數(shù)的第n個(gè)。本行最終sFinalInfo顯示的內(nèi)容為   My name is cwj , I am form Shanghai 。當(dāng)然了你有什么不懂的地方可以來(lái)函至 android123@163.com

24. Android工程內(nèi)嵌資源文件的兩種方法

Android軟件一般處理大的資源通過(guò)sdcard比如在線下載資源到sdcard,而apk中內(nèi)嵌資源或二進(jìn)制文件時(shí)一般使用下面的兩種方法:   方法一   res/raw目錄下存放,比如cwj.dat一個(gè)二進(jìn)制文件,我們可以讀取可以直接  InputStream is=context.getResources().openRawResource(R.raw.cwj);    方法二   工程根目錄下的assets文件夾中存放,比如assets/cwj.dat 這樣我們使用下面的代碼   AssetManager am = context.getAssets();  
  InputStream is = am.open(cwj.dat);     這里Android123提示大家Google的Android系統(tǒng)處理Assert有個(gè)bug,在AssertManager中不能處理單個(gè)超過(guò)1MB的文件,不然會(huì)報(bào)異常具體數(shù)值大家可以測(cè)試下傳個(gè)稍大的文件,我們?cè)趦赡昵暗奈恼轮杏刑岬剑谝环Nraw沒(méi)這個(gè)限制可以放個(gè)4MB的Mp3文件沒(méi)問(wèn)題。

25. Android自定義View以及l(fā)ayout屬性全攻略

對(duì)于Android系統(tǒng)的自定義View可能大家都熟悉了,對(duì)于自定義View的屬性添加,以及Android的Layout的命名空間問(wèn)題,很多網(wǎng)友還不是很清楚,今天Android123一起再帶大家溫習(xí)一下   CwjView myView=new CwjView(context);   如果用于游戲或整個(gè)窗體的界面,我們可能直接在onCreate中setContentView(myView); 當(dāng)然如果是控件,我們可能會(huì)需要從Layout的xml中聲明,比如   <cn.com.android123.CwjView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
  />   當(dāng)然,我們也可以直接從父類聲明比如   <View class="cn.com.android123.CwjView"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
  /> 上面我們僅用了父類View的兩個(gè)屬性,均來(lái)自android命名空間,而名稱為layout_width或layout_height,我們自定義的控件可能有更多的功能,比如     <cn.com.android123.CwjView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
  cwj:age="22"
   cwj:university="sjtu"
   cwj:city="shanghai"

   /> 我們可以看到上面的三個(gè)屬性,是我們自定義的。作為標(biāo)準(zhǔn)xml規(guī)范,可能還包含了類似 xmlns:android="http://schemas.android.com/apk/res/android"  這樣的語(yǔ)句,對(duì)于定義完整的View,我們的命名空間為cwj,這里可以寫為 xmlns:cwj=http://schemas.android.com/apk/res/cn.com.android123.cwjView 或 xmlns:cwj=http://schemas.android.com/apk/res/android 都可以。   對(duì)于定義的cwj命名空間和age、university以及city的三個(gè)屬性我們?nèi)绾味x呢? 在工程的res/values目錄中我們新建一個(gè)cwj_attr.xml文件,編碼方式為utf-8是一個(gè)好習(xí)慣,內(nèi)容如下 <?xml version="1.0" encoding="utf-8" ?>
<resources>
  <declare-styleable name="CwjView">
  <attr name="age" format="integer" />
  <attr name="city" format="string" />
  <attr name="university" format="string" />
  </declare-styleable>
</resources>   這里我們可能對(duì)format不是很熟悉,目前Android系統(tǒng)內(nèi)置的格式類型有integer比如ProgressBar的進(jìn)度值,float比如RatingBar的值可能是3.5顆星,boolean比如ToggleButton的是否勾選,string比如TextView的text屬性,當(dāng)然除了我們常見(jiàn)的基礎(chǔ)類型外,Android的屬性還有特殊的比如color是用于顏色屬性的,可以識(shí)別為#FF0000等類型,當(dāng)然還有dimension的尺寸類型,比如23dip,15px,18sp的長(zhǎng)度單位,還有一種特殊的為reference,一般用于引用@+id/cwj @drawable/xxx這樣的類型。   當(dāng)然什么時(shí)候用reference呢? 我們就以定義一個(gè)顏色為例子,   <attr name="red" format="color|reference" />  這里我們用了邏輯或的運(yùn)算符,定義的紅色是顏色類型的,同時(shí)可以被引用   當(dāng)然,對(duì)于我們自定義的類中,我們需要使用一個(gè)名為obtainStyledAttributes的方法來(lái)獲取我們的定義。在我們自定義View的構(gòu)造方法(Context context, AttributeSet attrs)的重載類型中可以用   public CwjView(Context context, AttributeSet attrs) {
  super(context, attrs);
        TypedArray a = context.obtainStyledAttributes(attrs,
          R.styleable.cwj_attr);
        mAge = a.getInteger(R.styleable.CwjView_age, 22);
        mCity = a.getString(R.styleable.CwjView_city, "shanghai");
        mUniversity= a.getString(R.styleable.CwjView_university, "sjtu");
        a.recycle(); //Android123提示大家不要忘了回收資源 } 這樣類的全局成員變量 mAge、mCity就獲取了我們需要的內(nèi)容,當(dāng)然根據(jù)layout中的數(shù)值我們自定義的CwjView需要?jiǎng)討B(tài)的處理一些數(shù)據(jù)的情況,可以使用AttributeSet類的getAttributeResourceValue方法獲取。 public CwjView(Context context, AttributeSet attrs)
{
  super(context, attrs);
  resId = attrs.getAttributeResourceValue("cn.com.android123.CwjView", "age", 100);  
  resId = attrs.getAttributeResourceValue("cn.com.android123.CwjView", "city", "shanghai");
  //resID就可以任意使用了
} 以上兩種方法中,參數(shù)的最后一個(gè)數(shù)值為默認(rèn)的,如果您有不明白的地方可以來(lái)函到android123@163.com 我們會(huì)在第一時(shí)間回復(fù)。

26. 自定義Android主題風(fēng)格theme.xml方法

在Android中可以通過(guò)自定義主題風(fēng)格方式來(lái)實(shí)現(xiàn)個(gè)性化以及復(fù)用,首先我們創(chuàng)建theme.xml主題文件,保存位置為工程的res/values/theme.xml ,這里我們可以可以為主題起一個(gè)名稱,比如CWJ,這里去除了xml的文件頭<?xml version="1.0" encoding="utf-8"?>這行,我們?cè)诠こ讨兄恍柙赼ndroidmanifest.xml文件的Activity節(jié)點(diǎn)中加入android:theme="@style/Theme.CWJ" 屬性,則這個(gè)Activity就使用了這種主題風(fēng)格,整個(gè)xml的關(guān)鍵代碼如下: <resources>
    <style name="Theme.CWJ" parent="android:Theme">
        <item name="android:windowBackground">@drawable/android123</item>
    </style>
</resources>   其中上面的代碼中,我們定義設(shè)置全局android:windowBackground即背景值為/res/drawable中的android123圖片為背景,更多的屬性定義可以參考view的layout xml屬性設(shè)置,比如我們?cè)O(shè)置所有字體顏色、大體大小和樣式,可以在style節(jié)點(diǎn)中加入   <item name="android:textColor">#fff</item>
  <item name="android:textSize">14sp</item>
  <item name="android:textStyle">bold</item>  當(dāng)然我們可以將上面的android123的圖片改進(jìn)下,使用一個(gè)xml文件替代,比如使用bitmap對(duì)象,則/res/drawable/android123.xml的完整代碼變?yōu)?nbsp;  <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
     android:src="@drawable/cwj_image"
     android:tileMode="repeat" />    這里我們使用了一個(gè)bitmap對(duì)象來(lái)解析cwj_image圖片,當(dāng)然這里可以識(shí)別各種類型的圖片,其中android:tileMode是bitmap的內(nèi)部屬性,其中tileMode設(shè)置為repeat代表重復(fù),這樣可以節(jié)省bitmap資源,比如我們的背景是一層樓,那么全屏可以顯示同樣的為5層效果,而圖片僅是一層大小,對(duì)于資源利用相對(duì)更高。   當(dāng)然bitmap的屬性tileMode的值為repeat外還有其他的值比如clamp、mirror,這些值并沒(méi)有在SDK中并沒(méi)有找到定義,通過(guò)上次Android開發(fā)網(wǎng)的 Android自定義View以及l(fā)ayout屬性全攻略 一文,我們可以聯(lián)想到bitmap屬于android.graphics.Bitmap 包,由于是android框架,所以下載git的base包,找到該類,類的實(shí)例化時(shí)android123已經(jīng)在 Android自定義View以及l(fā)ayout屬性全攻略 說(shuō)的很清楚,所以我們定位到res\values中找到attr.xml有關(guān)bitmap的定義即可,有關(guān)bitmap的更多屬性如  antialias、filter和dither都可以找到使用。

27. android調(diào)試工具monkey壓力測(cè)試實(shí)戰(zhàn)

很多Android開發(fā)者可能因?yàn)闆](méi)有充分測(cè)試自己的軟件造成很容易出現(xiàn)FC(Force Close)的問(wèn)題,這里我們可以通過(guò)使用Android固件中自帶的monkey工具來(lái)做軟件的壓力測(cè)試,monkey工具可以模擬各種按鍵,觸屏,軌跡球、activity等事件,這里Android123提示大家說(shuō)白了monkey就是一個(gè)小猴子隨機(jī)狂玩你的android軟件,看看會(huì)不會(huì)產(chǎn)生異常。   具體的使用我們通過(guò)Android SDK給我們的adb調(diào)試橋鏈接設(shè)備或模擬器,進(jìn)入Linux Shell狀態(tài),當(dāng)然我們可以輸入adb shell獲取設(shè)備的shell,也可以直接通過(guò)adb命令執(zhí)行,比如說(shuō)adb shell monkey來(lái)查看monkey工具中的參數(shù)說(shuō)明,如圖:     我們要測(cè)試的apk文件要在android設(shè)備中已經(jīng)安裝,當(dāng)然模擬器中也可以測(cè)試的。執(zhí)行adb shell monkey -p cn.com.android123.cwj -v 100 我們執(zhí)行這句的中包含了p參數(shù),這里代表已安裝軟件的packageName,而v代表查看monkey生成的詳細(xì)隨機(jī)事件名,最后的數(shù)字100為我們測(cè)試的隨機(jī)事件數(shù)量為100.有關(guān)更多的測(cè)試方法,請(qǐng)查看上圖中的參數(shù),整個(gè)測(cè)試比較簡(jiǎn)單單很有效,不妨試試。

28. 自定義View

有關(guān)Android的自定義View的框架今天我們一起討論下,對(duì)于常規(guī)的游戲,我們?cè)赩iew中需要處理以下幾種問(wèn)題: 1.控制事件 2.刷新View 3. 繪制View   1. 對(duì)于控制事件今天我們只處理按鍵事件onKeyDown,以后的文章中將會(huì)講到屏幕觸控的具體處理onTouchEvent以及Sensor重力感應(yīng)等方法。   2. 刷新view的方法這里主要有invalidate(int l, int t, int r, int b) 刷新局部,四個(gè)參數(shù)分別為左、上、右、下。整個(gè)view刷新 invalidate(),刷新一個(gè)矩形區(qū)域 invalidate(Rect dirty) ,刷新一個(gè)特性Drawable, invalidateDrawable(Drawable drawable) ,執(zhí)行invalidate類的方法將會(huì)設(shè)置view為無(wú)效,最終導(dǎo)致onDraw方法被重新調(diào)用。由于今天的view比較簡(jiǎn)單,Android123提示大家如果在線程中刷新,除了使用handler方式外,可以在Thread中直接使用postInvalidate方法來(lái)實(shí)現(xiàn)。   3. 繪制View主要是onDraw()中通過(guò)形參canvas來(lái)處理,相關(guān)的繪制主要有drawRect、drawLine、drawPath等等。view方法內(nèi)部還重寫了很多接口,其回調(diào)方法可以幫助我們判斷出view的位置和大小,比如onMeasure(int, int) Called to determine the size requirements for this view and all of its children.  、onLayout(boolean, int, int, int, int) Called when this view should assign a size and position to all of its children 和onSizeChanged(int, int, int, int) Called when the size of this view has changed. 具體的作用,大家可以用Logcat獲取當(dāng)view變化時(shí)每個(gè)形參的變動(dòng)。   下面cwjView是我們?yōu)榻窈笥螒蛟O(shè)計(jì)的一個(gè)簡(jiǎn)單自定義View框架,我們可以看到在Android平臺(tái)自定義view還是很簡(jiǎn)單的,同時(shí)Java支持多繼承可以幫助我們不斷的完善復(fù)雜的問(wèn)題。 public class cwjView extends View {     public cwjView(Context context) {
      super(context);
      setFocusable(true); //允許獲得焦點(diǎn)
      setFocusableInTouchMode(true); //獲取焦點(diǎn)時(shí)允許觸控
   }    @Override
   protected Parcelable onSaveInstanceState() {  //處理窗口保存事件
      Parcelable pSaved = super.onSaveInstanceState();
      Bundle bundle = new Bundle();
     //dosomething
      return bundle;
   }
   @Override
   protected void onRestoreInstanceState(Parcelable state) {  //處理窗口還原事件
      Bundle bundle = (Bundle) state;      //dosomething
     super.onRestoreInstanceState(bundle.getParcelable("cwj"));
      return;
   }
       @Override
   protected void onSizeChanged(int w, int h, int oldw, int oldh) //處理窗口大小變化事件
   {
      super.onSizeChanged(w, h, oldw, oldh);
   }    @Override
   protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)  
   {
      super.onMeasure(widthMeasureSpec, heightMeasureSpec); //如果不讓父類處理記住調(diào)用setMeasuredDimension
   }
   @Override
   protected void onLayout (boolean changed, int left, int top, int right, int bottom)
   {
    super.onLayout (changed,left,top, ight,bottom) ;
   }    @Override
   protected void onDraw(Canvas canvas) {
      Paint bg = new Paint();
      bg.setColor(Color.Red);
      canvas.drawRect(0, 0, getWidth()/2, getHeight()/2, bg); //將view的左上角四分之一填充為紅色  
   }    @Override
   public boolean onTouchEvent(MotionEvent event) {
         return super.onTouchEvent(event); //讓父類處理屏幕觸控事件
   }    @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) { //處理按鍵事件,響應(yīng)的軌跡球事件為 public boolean onTrackballEvent (MotionEvent event)
      switch (keyCode) {
      case KeyEvent.KEYCODE_DPAD_UP:
         break;
      case KeyEvent.KEYCODE_DPAD_DOWN:
         break;
      case KeyEvent.KEYCODE_DPAD_LEFT:
         break;
      case KeyEvent.KEYCODE_DPAD_RIGHT:
         break;
      case KeyEvent.KEYCODE_DPAD_CENTER: //處理中鍵按下
         break;
      default:
         return super.onKeyDown(keyCode, event);
      }
      return true;
   } }   上面我們可以看到onMeasure使用的是父類的處理方法,如果我們需要解決自定義View的大小,可以嘗試下面的方法    @Override
   protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)  
   {
      height = View.MeasureSpec.getSize(heightMeasureSpec); 
      width = View.MeasureSpec.getSize(widthMeasureSpec); 
      setMeasuredDimension(width,height);   //這里面是原始的大小,需要重新計(jì)算可以修改本行      //dosomething    }

29. Canvas和Paint實(shí)例

昨天我們?cè)?span style="color: rgb(86, 182, 233); ">Android游戲開發(fā)之旅三 View詳解中提到了onDraw方法,有關(guān)詳細(xì)的實(shí)現(xiàn)我們今天主要說(shuō)下Android的Canvas和Paint對(duì)象的使用實(shí)例。   Canvas類主要實(shí)現(xiàn)了屏幕的繪制過(guò)程,其中包含了很多實(shí)用的方法,比如繪制一條路徑、區(qū)域、貼圖、畫點(diǎn)、畫線、渲染文本,下面是Canvas類常用的方法,當(dāng)然Android開發(fā)網(wǎng)提示大家很多方法有不同的重載版本,參數(shù)更靈活。   void drawRect(RectF rect, Paint paint) //繪制區(qū)域,參數(shù)一為RectF一個(gè)區(qū)域   void drawPath(Path path, Paint paint) //繪制一個(gè)路徑,參數(shù)一為Path路徑對(duì)象    void  drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)   //貼圖,參數(shù)一就是我們常規(guī)的Bitmap對(duì)象,參數(shù)二是源區(qū)域(Android123提示這里是bitmap),參數(shù)三是目標(biāo)區(qū)域(應(yīng)該在canvas的位置和大小),參數(shù)四是Paint畫刷對(duì)象,因?yàn)橛玫搅丝s放和拉伸的可能,當(dāng)原始Rect不等于目標(biāo)Rect時(shí)性能將會(huì)有大幅損失。    void  drawLine(float startX, float startY, float stopX, float stopY, Paint paint)  //畫線,參數(shù)一起始點(diǎn)的x軸位置,參數(shù)二起始點(diǎn)的y軸位置,參數(shù)三終點(diǎn)的x軸水平位置,參數(shù)四y軸垂直位置,最后一個(gè)參數(shù)為Paint畫刷對(duì)象。   void  drawPoint(float x, float y, Paint paint) //畫點(diǎn),參數(shù)一水平x軸,參數(shù)二垂直y軸,第三個(gè)參數(shù)為Paint對(duì)象。
  void drawText(String text, float x, float y, Paint paint)  //渲染文本,Canvas類除了上面的還可以描繪文字,參數(shù)一是String類型的文本,參數(shù)二x軸,參數(shù)三y軸,參數(shù)四是Paint對(duì)象。   void  drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) //在路徑上繪制文本,相對(duì)于上面第二個(gè)參數(shù)是Path路徑對(duì)象   從上面來(lái)看我們可以看出Canvas繪制類比較簡(jiǎn)單同時(shí)很靈活,實(shí)現(xiàn)一般的方法通常沒(méi)有問(wèn)題,同時(shí)可以疊加的處理設(shè)計(jì)出一些效果,不過(guò)細(xì)心的網(wǎng)友可能發(fā)現(xiàn)最后一個(gè)參數(shù)均為Paint對(duì)象。如果我們把Canvas當(dāng)做繪畫師來(lái)看,那么Paint就是我們繪畫的工具,比如畫筆、畫刷、顏料等等。   Paint類常用方法: void  setARGB(int a, int r, int g, int b)  設(shè)置Paint對(duì)象顏色,參數(shù)一為alpha透明通道
void  setAlpha(int a)  設(shè)置alpha不透明度,范圍為0~255 void  setAntiAlias(boolean aa)  //是否抗鋸齒 void  setColor(int color)  //設(shè)置顏色,這里Android內(nèi)部定義的有Color類包含了一些常見(jiàn)顏色定義
.
void  setFakeBoldText(boolean fakeBoldText)  //設(shè)置偽粗體文本
void  setLinearText(boolean linearText)  //設(shè)置線性文本
PathEffect  setPathEffect(PathEffect effect)  //設(shè)置路徑效果
Rasterizer  setRasterizer(Rasterizer rasterizer) //設(shè)置光柵化
Shader  setShader(Shader shader)  //設(shè)置陰影  void  setTextAlign(Paint.Align align)  //設(shè)置文本對(duì)齊
void  setTextScaleX(float scaleX)  //設(shè)置文本縮放倍數(shù),1.0f為原始
void  setTextSize(float textSize)  //設(shè)置字體大小
Typeface  setTypeface(Typeface typeface)  //設(shè)置字體,Typeface包含了字體的類型,粗細(xì),還有傾斜、顏色等。 void  setUnderlineText(boolean underlineText)  //設(shè)置下劃線
最終Canvas和Paint在onDraw中直接使用 @Override
   protected void onDraw(Canvas canvas) {     Paint paintRed=new Paint();     paintRed.setColor(Color.Red);     canvas.drawPoint(11,3,paintRed); //在坐標(biāo)11,3上畫一個(gè)紅點(diǎn)
  }   下一次Android123將會(huì)具體講到強(qiáng)大的Path路徑,和字體Typeface相關(guān)的使用。

30. View類詳解

在Android游戲開發(fā)之旅二中我們講到了View和SurfaceView的區(qū)別,今天Android123從View類開始著重的介紹Android圖形顯示基類的相關(guān)方法和注意點(diǎn)。   自定義View的常用方法: onFinishInflate() 當(dāng)View中所有的子控件均被映射成xml后觸發(fā) onMeasure(int, int) 確定所有子元素的大小 onLayout(boolean, int, int, int, int) 當(dāng)View分配所有的子元素的大小和位置時(shí)觸發(fā) onSizeChanged(int, int, int, int) 當(dāng)view的大小發(fā)生變化時(shí)觸發(fā) onDraw(Canvas) view渲染內(nèi)容的細(xì)節(jié) onKeyDown(int, KeyEvent) 有按鍵按下后觸發(fā) onKeyUp(int, KeyEvent) 有按鍵按下后彈起時(shí)觸發(fā) onTrackballEvent(MotionEvent) 軌跡球事件 onTouchEvent(MotionEvent) 觸屏事件 onFocusChanged(boolean, int, Rect) 當(dāng)View獲取或失去焦點(diǎn)時(shí)觸發(fā)  onWindowFocusChanged(boolean) 當(dāng)窗口包含的view獲取或失去焦點(diǎn)時(shí)觸發(fā) onAttachedToWindow() 當(dāng)view被附著到一個(gè)窗口時(shí)觸發(fā) onDetachedFromWindow() 當(dāng)view離開附著的窗口時(shí)觸發(fā),Android123提示該方法和  onAttachedToWindow() 是相反的。 onWindowVisibilityChanged(int) 當(dāng)窗口中包含的可見(jiàn)的view發(fā)生變化時(shí)觸發(fā)   以上是View實(shí)現(xiàn)的一些基本接口的回調(diào)方法,一般我們需要處理畫布的顯示時(shí),重寫onDraw(Canvas)用的的是最多的:   @Override
   protected void onDraw(Canvas canvas) {
    //這里我們直接使用canvas對(duì)象處理當(dāng)前的畫布,比如說(shuō)使用Paint來(lái)選擇要填充的顏色    Paint paintBackground = new Paint();
   paintBackground.setColor(getResources().getColor(R.color.xxx));  //從Res中找到名為xxx的color顏色定義
   canvas.drawRect(0, 0, getWidth(), getHeight(), paintBackground); //設(shè)置當(dāng)前畫布的背景顏色為paintBackground中定義的顏色,以0,0作為為起點(diǎn),以當(dāng)前畫布的寬度和高度為重點(diǎn)即整塊畫布來(lái)填充。      具體的請(qǐng)查看Android123未來(lái)講到的Canvas和Paint,在Canvas中我們可以實(shí)現(xiàn)畫路徑,圖形,區(qū)域,線。而Paint作為繪畫方式的對(duì)象可以設(shè)置顏色,大小,甚至字體的類型等等。 } 當(dāng)然還有就是處理窗口還原狀態(tài)問(wèn)題(一般用于橫豎屏切換),除了在Activity中可以調(diào)用外,開發(fā)游戲時(shí)我們盡量在View中使用類似 @Override
   protected Parcelable onSaveInstanceState() {
      Parcelable p = super.onSaveInstanceState();
      Bundle bundle = new Bundle();
      bundle.putInt("x", pX);
      bundle.putInt("y", pY);
      bundle.putParcelable("android123_state", p);
      return bundle;
   }
   @Override
   protected void onRestoreInstanceState(Parcelable state) { 
      Bundle bundle = (Bundle) state;
      dosomething(bundle.getInt("x"), bundle.getInt("y")); //獲取剛才存儲(chǔ)的x和y信息
      super.onRestoreInstanceState(bundle.getParcelable("android123_state"));
      return;
   }   在View中如果需要強(qiáng)制調(diào)用繪制方法onDraw,可以使用invalidate()方法,它有很多重載版本,同時(shí)在線程中的postInvailidate()方法將在Android游戲開發(fā)之旅六中的 自定義View完整篇講到。

31. View和SurfaceView

在Android游戲當(dāng)中充當(dāng)主要的除了控制類外就是顯示類,在J2ME中我們用Display和Canvas來(lái)實(shí)現(xiàn)這些,而Google Android中涉及到顯示的為view類,Android游戲開發(fā)中比較重要和復(fù)雜的就是顯示和游戲邏輯的處理。這里我們說(shuō)下android.view.View和android.view.SurfaceView。SurfaceView是從View基類中派生出來(lái)的顯示類,直接子類有GLSurfaceView和VideoView,可以看出GL和視頻播放以及Camera攝像頭一般均使用SurfaceView,到底有哪些優(yōu)勢(shì)呢? SurfaceView可以控制表面的格式,比如大小,顯示在屏幕中的位置,最關(guān)鍵是的提供了SurfaceHolder類,使用getHolder方法獲取,相關(guān)的有Canvas  lockCanvas() 
Canvas  lockCanvas(Rect dirty)  、void  removeCallback(SurfaceHolder.Callback callback)、void  unlockCanvasAndPost(Canvas canvas) 控制圖形以及繪制,而在SurfaceHolder.Callback 接口回調(diào)中可以通過(guò)下面三個(gè)抽象類可以自己定義具體的實(shí)現(xiàn),比如第一個(gè)更改格式和顯示畫面。 abstract void  surfaceChanged(SurfaceHolder holder, int format, int width, int height)
abstract void  surfaceCreated(SurfaceHolder holder)
abstract void  surfaceDestroyed(SurfaceHolder holder)
  對(duì)于Surface相關(guān)的,Android底層還提供了GPU加速功能,所以一般實(shí)時(shí)性很強(qiáng)的應(yīng)用中主要使用SurfaceView而不是直接從View構(gòu)建,同時(shí)Android123未來(lái)后面說(shuō)到的OpenGL中的GLSurfaceView也是從該類實(shí)現(xiàn)。 

32. Android程序內(nèi)存管理必讀

很多開發(fā)者都是從J2ME或J2EE上過(guò)來(lái)的,對(duì)于內(nèi)存的使用和理解并不是很到位,Android開發(fā)網(wǎng)本次給大家一些架構(gòu)上的指導(dǎo),防止出現(xiàn)豆腐渣工程的出現(xiàn)。Android作為以Java語(yǔ)言為主的智能平臺(tái)對(duì)于我們開發(fā)一些高性能和質(zhì)量的軟件來(lái)說(shuō)了解Android程序內(nèi)存管理機(jī)制是必須的。 Android的Dalvik VM在基礎(chǔ)方面和Sun JVM沒(méi)有什么大的區(qū)別僅僅是字節(jié)碼的優(yōu)化,我們要知道什么時(shí)候用gc什么時(shí)候用recycle以及到底用不用finalization,因?yàn)镴ava對(duì)內(nèi)存的分配只需要new開發(fā)者不需要顯示的釋放內(nèi)存,但是這樣造成的內(nèi)存泄露問(wèn)題的幾率反而更高。   1.對(duì)于常規(guī)開發(fā)者而言需要了解 Java的四種引用方式,比如強(qiáng)引用,軟引用,弱引用以及虛引用。一些復(fù)雜些的程序在長(zhǎng)期運(yùn)行很可能出現(xiàn)類似OutOfMemoryError的異常。 2.并不要過(guò)多的指望gc,不用的對(duì)象可以顯示的設(shè)置為空,比如obj=null,這里Android123提示大家,java的gc使用的是一個(gè)有向圖,判斷一個(gè)對(duì)象是否有效看的是其他的對(duì)象能到達(dá)這個(gè)對(duì)象的頂點(diǎn),有向圖的相對(duì)于鏈表、二叉樹來(lái)說(shuō)開銷是可想而知。 3.Android為每個(gè)程序分配的對(duì)內(nèi)存可以通過(guò)Runtime類的totalMemory() freeMemory() 兩個(gè)方法獲取VM的一些內(nèi)存信息,對(duì)于系統(tǒng)heap內(nèi)存獲取,可以通過(guò)Dalvik.VMRuntime類的getMinimumHeapSize() 方法獲取最小可用堆內(nèi)存,同時(shí)顯示釋放軟引用可以調(diào)用該類的gcSoftReferences() 方法,獲取更多的運(yùn)行內(nèi)存。 4.對(duì)于多線程的處理,如果并發(fā)的線程很多,同時(shí)有頻繁的創(chuàng)建和釋放,可以通過(guò)concurrent類的線程池解決線程創(chuàng)建的效率瓶頸。 5. 不要在循環(huán)中創(chuàng)建過(guò)多的本地變量。 有關(guān)Android和Java的系統(tǒng)性能分析,Android123將在以后的文章中詳細(xì)講述如何調(diào)試Java分析內(nèi)存泄露以及Android上的gdb調(diào)試器分析得出內(nèi)存性能改進(jìn)。

33. Android中內(nèi)嵌字體實(shí)現(xiàn)個(gè)性化

在Android中我們的應(yīng)用可以靈活的內(nèi)嵌自己的字體文件,實(shí)現(xiàn)各個(gè)手機(jī)上可以正常的顯示個(gè)性化文字,我們都知道TextView的setTypeface方法可以設(shè)置目標(biāo)文字的顯示特性,比如字體、顏色、粗體、斜體等。我們直接找一個(gè)TrueTypeFont的字體文件即.ttf,對(duì)于Win32系統(tǒng)的用戶可以直接在Windows/fonts文件夾中能找到很多。比如微軟雅黑就不錯(cuò),可是體積太大,由于Android的Assets類有單個(gè)文件1MB體積的限制,我們先找個(gè)英文字體做測(cè)試。這里我們將字體文件android123.ttf放到工程的assets文件夾的fonts目錄中。      Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/android123.ttf");   
     TextView tv = (TextView)findViewById(R.id.text);            tv.setTypeface(tf);    //設(shè)置TextView的風(fēng)格
        tv.setText("CWJ Test");  
        tv.setTextSize(12); 
        tv.setTextColor(Color.RED);

34. 獲取和設(shè)置ListView的選擇項(xiàng)

獲取當(dāng)前選中項(xiàng)  int curPos = listView.getFirstVisiblePosition(); 當(dāng)然是用getItemAtPosition(int nPos)方法也可以 ,設(shè)置當(dāng)前選擇位置 listView.setSelectedPosition(lastPos);  對(duì)于基于AbsListView為基類的ListView等控件均可以使用這種方法。

35. android.text.format文件大小和日期解析類

很多網(wǎng)友可能直接將自己的J2ME項(xiàng)目生硬的移植到Android平臺(tái),其實(shí)Google為我們提供好了文件大小和時(shí)間日期解析類,它位于android.text.format這個(gè)包中,它提供了強(qiáng)大的標(biāo)準(zhǔn)化解析方法:   1. IP地址解析類 在android.text.format.Formatter中提供了String formatIpAddress(int addr) 這個(gè)方法可以輕松方便的將socket中的int型轉(zhuǎn)成類似127.0.0.1的IP格式,需要注意的是Linux平臺(tái)的字節(jié)順序,即小字節(jié)序、低字節(jié)序little-endian。   2. 文件大小解析類 細(xì)心的網(wǎng)友可能還看到了android.text.format.Formatter中的formatFileSize方法,該方法String formatFileSize (Context context, long number) ,第二個(gè)參數(shù)是long型,一般為File對(duì)象的最后修改時(shí)間或創(chuàng)建時(shí)間的方法,最終返回類似 12KB、5Bytes的值,20MB的字符串。   3. 日期時(shí)間解析類 ,該類位于android.text.format.DateFormat這個(gè)package中,該類提供了Java中的三種時(shí)間對(duì)象,Android123提示大家下面三種方法為靜態(tài)可以直接調(diào)用,如下:   final static CharSequence  format(CharSequence inFormat, Date inDate)  //傳入Date對(duì)象
  Given a format string and a Date object, returns a CharSequence containing the requested date. final static CharSequence  format(CharSequence inFormat, Calendar inDate)  //Calendar對(duì)象
Given a format string and a Calendar object, returns a CharSequence containing the requested date. final static CharSequence  format(CharSequence inFormat, long inTimeInMillis)  //long對(duì)象
Given a format string and a time in milliseconds since Jan 1, 1970 GMT, returns a CharSequence containing the requested date.   我們可能看到了第一個(gè)參數(shù)均為inFormat這是一個(gè)CharSequence接口的String類型,它提供了靈活的時(shí)間格式解析字符串描述,Android開發(fā)網(wǎng)提示大家注意大小寫要區(qū)分,如    April 6, 1970 at 3:23am 例子,那么inFormat參數(shù)的寫法和最終執(zhí)行的結(jié)果如下對(duì)照,下面就以Android123的CWJ生日為例子如下 "MM/dd/yy h:mmaa" -> "11/03/87 11:23am"
"MMM dd, yyyy h:mmaa" -> "Nov 3, 1987 11:23am"
"MMMM dd, yyyy h:mmaa" -> "November  3, 1987 11:23am"
"E, MMMM dd, yyyy h:mmaa" -> "Tues, November 3, 1987 11:23am"
"EEEE, MMMM dd, yyyy h:mmaa" -> "Tuesday, Nov 3, 1987 11:23am"   對(duì)于判斷一個(gè)時(shí)間是否為24小時(shí)制式可以通過(guò)android.text.format.DateFormat類的static boolean  is24HourFormat(Context context)方法來(lái)判斷。

36. Android代碼性能優(yōu)化技巧

目前來(lái)說(shuō)Android 2.2的JIT性能有了本質(zhì)的提高,不過(guò)對(duì)于老版本的程序提高Java執(zhí)行效率還有很多語(yǔ)言特點(diǎn)來(lái)說(shuō),今天Android123提到的不是語(yǔ)法糖,而是基礎(chǔ)的問(wèn)題,對(duì)于Java 1.5之后將會(huì)有明顯的改進(jìn)。下面的例子來(lái)自SDK: static class Foo {
        int mSplat;
    }
    Foo[] mArray = ... 
上面的靜態(tài)類Foo的執(zhí)行效果和性能,我們分三個(gè)方法zero、one和two來(lái)做對(duì)比。
    public void zero() {  //大多數(shù)人可能簡(jiǎn)單直接這樣寫
        int sum = 0;
        for (int i = 0; i < mArray.length; ++i) {
            sum += mArray.mSplat;
        }
    }
    public void one() { //通過(guò)本地對(duì)象改進(jìn)性能
        int sum = 0;
        Foo[] localArray = mArray;
        int len = localArray.length;
        for (int i = 0; i < len; ++i) {
            sum += localArray.mSplat;
        }
    }
    public void two() { //推薦的方法,通過(guò)Java 1.5的新語(yǔ)法特性可以大幅改進(jìn)性能
        int sum = 0;
        for (Foo a : mArray) {
            sum += a.mSplat;
        } 
    } zero() is slowest, because the JIT can't yet optimize away the cost of getting the array length once for every iteration through the loop. one() is faster. It pulls everything out into local variables, avoiding the lookups. Only the array length offers a performance benefit. two() is fastest for devices without a JIT, and indistinguishable from one() for devices with a JIT. It uses the enhanced for loop syntax introduced in version 1.5 of the Java programming language.

37. Android開發(fā)注意點(diǎn) Part One

Android已經(jīng)的很多細(xì)節(jié)問(wèn)題我們通過(guò)平臺(tái)開發(fā)總結(jié)不斷完善這個(gè)列表,如果你有相關(guān)的內(nèi)容可以聯(lián)系android123@163.com .    一、AssetManager - 已知單個(gè)文件處理不能大于1MB,所以如果資源很大,建議使用Zip格式壓縮存放。    二、ScrollView中嵌入ListView - 這個(gè)作法可能會(huì)出現(xiàn)你的ListView僅僅顯示1行半。    三、Android自帶的Zip處理類對(duì)文件名編碼無(wú)法識(shí)別,也沒(méi)有提供顯示的設(shè)置方法,在zlib中寫死了。    四、使用一些資源對(duì)象記住關(guān)閉,比如對(duì)于文件流對(duì)象最后           FileOutputStream os = xxx;            try {
                //dosomething
            } finally {
                os.close();  //顯示的使用finally關(guān)閉文件對(duì)象。
            }           對(duì)于Cursor而言,在移動(dòng)位置時(shí)首先判斷Cursor是否為空,最終使用完仍然需要 close方法,如果重用,可以使用deactivate方法釋放當(dāng)前資源,通過(guò)requery方法再次查詢。   五、SDK中標(biāo)記為 deprecated 字樣的,常規(guī)情況下是有更好的方法可以替代,短期內(nèi)可以放心使用。這些方法一般高版本的SDK都可以向上兼容,目前尚未發(fā)現(xiàn)Android放棄某些API的支持。   六、Notification的Intent無(wú)法傳遞到目標(biāo)的Activity,Service和Broardcast沒(méi)有測(cè)試過(guò),中途需要通過(guò)PendingIntent,可能這里出現(xiàn)了問(wèn)題。

38. Android上HTTP協(xié)議通訊狀態(tài)獲取

通常情況下輕量級(jí)的Http傳輸Android平臺(tái)可以直接使用Sun Java的HttpURLConnection類方法處理,比如果自己定義一次請(qǐng)求header可以通過(guò)setRequestProperty設(shè)置,而我們需要獲取的Http Web Server狀態(tài)可以通過(guò)HttpURLConnection.getResponseCode() 的方法獲取。   當(dāng)然Http協(xié)議返回值常見(jiàn)的有 200 為成功,400為請(qǐng)求錯(cuò)誤,404為未找到,500為服務(wù)器內(nèi)部錯(cuò)誤,403無(wú)權(quán)查看,302為重定向等等。   對(duì)于Android平臺(tái)提供更完善的Apache類有HttpClient 、HttpPost、HttpResponse、HttpGet和HttpEntity,其中對(duì)于數(shù)據(jù)報(bào)頭header構(gòu)造通過(guò)HttpEntity,而返回狀態(tài)值可以通過(guò)HttpResponse獲取。   有關(guān)Android客戶端和Server通訊類相關(guān)的開發(fā)我們將會(huì)在以后文章中做大量實(shí)例介紹。

39. Android布局Java代碼構(gòu)造法

一般情況下對(duì)于Android程序布局我們往往使用XML文件來(lái)編寫,這樣可以提高開發(fā)效率,但是考慮到代碼的安全性以及執(zhí)行效率,可以通過(guò)Java代碼執(zhí)行創(chuàng)建,雖然Android編譯過(guò)的xml是二進(jìn)制的,但是加載xml解析器的效率對(duì)于資源占用還是比較大的,一般一個(gè)簡(jiǎn)單的TextView,比如     <TextView
    android:id="@+id/textControl "
    android:layout_width="100px"
    android:layout_height="wrap_content" />    可以等價(jià)于下面的Java代碼:    LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(100, LayoutParams.WRAP_CONTENT); //寬度為100px,高為自適應(yīng)最小的高度    // setOrientation(VERTICAL); 設(shè)置布局為垂直    TextView textControl = new TextView(this);//如果從一個(gè)XXXLayout.,比如LinearLayout為View的基類時(shí)這里this應(yīng)該換成為創(chuàng)建改類的Context
   textControl.setText("Android開發(fā)網(wǎng)歡迎您");
   addView( textControl, textParams );    當(dāng)然Java處理效率比XML快得多,但是對(duì)于一個(gè)復(fù)雜界面的編寫,可能需要一些套嵌考慮,如果你思維靈活的話,使用Java代碼來(lái)布局你的Android應(yīng)用程序是一個(gè)更好的方法。

40. 測(cè)試Android軟件性能主要方法

對(duì)于Android平臺(tái)上軟件的性能測(cè)試可以通過(guò)以下幾種方法來(lái)分析效率瓶頸,目前Google在Android軟件開發(fā)過(guò)程中已經(jīng)引入了多種測(cè)試工具包,比如Unit測(cè)試工程,調(diào)試類,還有模擬器的Dev Tools都可以直接反應(yīng)執(zhí)行性能。    1. 在模擬器上的Dev Tools可以激活屏幕顯示當(dāng)前的FPS,CPU使用率,可以幫助我們測(cè)試一些3D圖形界面的性能。    2.  一般涉及到網(wǎng)絡(luò)應(yīng)用的程序,在效率上和網(wǎng)速有很多關(guān)系,這里需要多次的調(diào)試才能實(shí)際了解。    3. 對(duì)于邏輯算法的效率執(zhí)行,我們使用Android上最普遍的,計(jì)算執(zhí)行時(shí)間來(lái)查看:       long start = System.currentTimeMillis();
      //android開發(fā)網(wǎng)提示這里做實(shí)際的處理do something
      long duration = System.currentTimeMillis() - start;       最終duration保存著實(shí)際處理該方法需要的毫秒數(shù)。這里類似Win32上的GetTickCount,在Win 32和Symbian上都提供了高精度的性能計(jì)數(shù)器和低階計(jì)時(shí)器,這里在Dalvik VM上的Java層這種方法對(duì)于一般的應(yīng)用足以。    4. GC效率跟蹤,如果你執(zhí)行的應(yīng)用比較簡(jiǎn)單,可以在DDMS中查看下Logcat的VM釋放內(nèi)存情況,大概模擬下那些地方可以緩存數(shù)據(jù)或改進(jìn)算法的。    5. 線程的使用和同步,Android平臺(tái)上給我們提供了豐富的多任務(wù)同步方法,但在深層上并沒(méi)有過(guò)多的比如自旋鎖等高級(jí)應(yīng)用,不過(guò)對(duì)于Service和appWidget而言,他們實(shí)際的產(chǎn)品中都應(yīng)該以多線程的方式處理,以釋放CPU時(shí)間,對(duì)于線程和堆內(nèi)存的查看這些都可以在DDMS中看到。    更多的調(diào)試和性能測(cè)試方法Android123將在以后的內(nèi)容中出現(xiàn)。

41. Splash Screen開場(chǎng)屏在Android中的實(shí)現(xiàn)

很多網(wǎng)友可能發(fā)現(xiàn)近期Tencent推出的手機(jī)QQ Android版包含了一個(gè)開場(chǎng)屏Splash Screen載入效果,通常游戲或大型軟件打開時(shí)可能需要一個(gè)釋放解析資源的過(guò)程,需要一個(gè)前臺(tái)的動(dòng)畫播放和后臺(tái)的邏輯處理線程配合,當(dāng)然對(duì)于簡(jiǎn)單的軟件也可以加一個(gè)Splash Screen作為美化。在Android平臺(tái)上如何實(shí)現(xiàn)呢?   首先創(chuàng)建一個(gè)Activirty,在SetContentView時(shí)直接通過(guò)ImageView創(chuàng)建一個(gè)全屏的圖片,Android123提示大家還要考慮好分辨率和當(dāng)前設(shè)備一致,onCreate添加代碼如下:   new Handler().postDelayed(new Runnable(){   // 為了減少代碼使用匿名Handler創(chuàng)建一個(gè)延時(shí)的調(diào)用
            public void run() {  
                Intent i = new Intent(SplashScreen.this, Main.class);    //通過(guò)Intent打開最終真正的主界面Main這個(gè)Activity
                SplashScreen.this.startActivity(i);    //啟動(dòng)Main界面
                SplashScreen.this.finish();    //關(guān)閉自己這個(gè)開場(chǎng)屏
            }  
        }, 5000);   //5秒,夠用了吧

42. Android的Activity你知多少呢?

看到這個(gè)標(biāo)題很多網(wǎng)友肯定回答,我知道Activity是Android上的窗口基類,了解Activity的生命周期比如onCreate onStop等,呵呵,按照這樣說(shuō)Android123還知道Activity的實(shí)現(xiàn)其實(shí)是從ApplicationContext,而ApplicationContext是從Context這個(gè)抽象類派生而來(lái)的,當(dāng)然我們看到顯示的是View或者ViewGroup,當(dāng)然今天說(shuō)的不是這些東西,而是很多網(wǎng)友來(lái)問(wèn)的Android為什么不設(shè)計(jì)一個(gè)任務(wù)管理器,當(dāng)然從Android 1.5開始ActivityManager類提供了restartPackage可以關(guān)閉一個(gè)程序,需要加上<uses-permission android:name="android.permission.RESTART_PACKAGES"/>這個(gè)權(quán)限,不過(guò)我們注意到,長(zhǎng)按Home鍵可以看到以前程序的運(yùn)行,同時(shí)可以快速的切換回來(lái)。這就是Android獨(dú)有的程序生命周期管理機(jī)制 Activity歷史棧。   我們?cè)谝粋€(gè)普通的程序主窗口A中打開了一個(gè)窗口B,而窗口B打開了窗口C,但是按下Back鍵后結(jié)果出乎了預(yù)期,是的這就是Activity的history stack的原因,在數(shù)據(jù)結(jié)構(gòu)中棧是FIFO的,阻止我們不愿意看的情況的發(fā)生則可以在打開新Activity時(shí)加上標(biāo)記FLAG_ACTIVITY_NO_HISTORY,代碼如下:     Intent i= new Intent(this, cwj.class);  
    i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);   //Android開發(fā)網(wǎng)提示大家相關(guān)的還有Intent.FLAG_ACTIVITY_CLEAR_TOP,都試試
    startActivity(i);    當(dāng)然更多的程序Activity控制可以再androidmanifest.xml中定義。

43. JSONObject在Android上的應(yīng)用

如果你過(guò)去開發(fā)過(guò)AJAX應(yīng)用,相信對(duì)JSONObject不會(huì)陌生吧,作為基于JavaScript的數(shù)據(jù)交換格式,可以直接代替Xml,這里Android從1.0開始就完全支持JSONObject。在平時(shí)應(yīng)用中直接引入import org.json.JSONObject;即可方便使用。當(dāng)然同類的還有SOAP。   在常規(guī)使用方便JSONObject對(duì)象可以實(shí)現(xiàn)類似Bundle或Parcel可以封裝數(shù)據(jù),代替一個(gè)XML的ITEM,但最大的優(yōu)勢(shì)是可以執(zhí)行一些簡(jiǎn)單的方法,比如說(shuō)getString、has、put、getBoolean、getInt等數(shù)據(jù)類型的存取操作。Android123提示大家對(duì)于常規(guī)的項(xiàng)目開發(fā),今天本文不考慮Server端的布局,在Android平臺(tái)上處理這些比較簡(jiǎn)單,主要是一些http的請(qǐng)求處理??梢灾苯右雐mport org.apache.http.xxx來(lái)實(shí)現(xiàn)web server層的數(shù)據(jù)交換,如果你沒(méi)有專業(yè)的Server開發(fā)技術(shù),可以通過(guò)簡(jiǎn)單的Web配合JSON方式快速實(shí)現(xiàn)自己的交互式應(yīng)用。

44. Android高性能文件類MemoryFile

很多網(wǎng)友抱怨Android處理底層I/O性能不是很理想,如果不想使用NDK則可以通過(guò)MemoryFile類實(shí)現(xiàn)高性能的文件讀寫操作。MemoryFile顧名思義就是內(nèi)存文件的意思,如果你過(guò)去從事過(guò)Win32開發(fā),那么它的原理就是MapViewOfFile(),當(dāng)然開發(fā)過(guò)Linux的網(wǎng)友可能很快就聯(lián)想到了mmap(),是的該類就是他們的托管代碼層封裝,位于android.os.MemoryFile這個(gè)位置,從Android 1.0開始就被支持。   MemoryFile適用于哪些地方呢?   對(duì)于I/O需要頻繁操作的,主要是和外部存儲(chǔ)相關(guān)的I/O操作,MemoryFile通過(guò)將 NAND或SD卡上的文件,分段映射到內(nèi)存中進(jìn)行修改處理,這樣就用高速的RAM代替了ROM或SD卡,性能自然提高不少,對(duì)于Android手機(jī)而言同時(shí)還減少了電量消耗。Android123提示網(wǎng)友該類實(shí)現(xiàn)的功能不是很多,直接從Object上繼承,通過(guò)JNI的方式直接在C底層執(zhí)行。 主要的構(gòu)造方法 MemoryFile(String name, int length) ,這里第二個(gè)參數(shù)為文件大小,需要說(shuō)明的是Android的MemoryFile和傳統(tǒng)的mmap還有一點(diǎn)點(diǎn)區(qū)別,畢竟是手機(jī),它內(nèi)部的內(nèi)存管理方式ashmem會(huì)從內(nèi)核中回收資源。畢竟目前部分低端機(jī)型的RAM也比較吃緊。  synchronized boolean  allowPurging(boolean allowPurging)  //允許ashmem清理內(nèi)存,線程安全同步的方式。
void  close() //關(guān)閉,因?yàn)樵贚inux內(nèi)部mmap占用一個(gè)句柄,不用時(shí)一定要釋放了
InputStream  getInputStream()  返回讀取的內(nèi)容用Java層的InputStream保存
OutputStream  getOutputStream()  把一個(gè)OutputSream寫入到MemoryFile中
boolean  isPurgingAllowed() //判斷是否允許清理
int  length()  //返回內(nèi)存映射文件大小 下面就是我們熟悉的,讀寫細(xì)節(jié),主要是對(duì)字符數(shù)組的操作,這里大家要計(jì)算好每個(gè)文件類型的占用,同時(shí)考慮到效率對(duì)于自己分配的大小考慮粒度對(duì)齊。
int  readBytes(byte[] buffer, int srcOffset, int destOffset, int count)
void  writeBytes(byte[] buffer, int srcOffset, int destOffset, int count)     具體的實(shí)際應(yīng)用,Android開發(fā)網(wǎng)將在下次和大家講到。

45. TextUtils類-Android字符串處理類

對(duì)于字符串處理Android為我們提供了一個(gè)簡(jiǎn)單實(shí)用的TextUtils類,如果處理比較簡(jiǎn)單的內(nèi)容不用去思考正則表達(dá)式不妨試試這個(gè)在android.text.TextUtils的類,主要的功能如下:   是否為空字符 static boolean  isEmpty(CharSequence str)  拆分字符串  public static String[] split (String text, String expression) ,Android開發(fā)網(wǎng)提示大家仔細(xì)看例子如下 String.split() returns [''] when the string to be split is empty. This returns []. This does not remove any empty strings from the result. For example split("a,", "," ) returns {"a", ""}. 拆分字符串使用正則 public static String[] split (String text, Pattern pattern)   確定大小寫是否有效在當(dāng)前位置的文本TextUtils.getCapsMode(CharSequence cs, int off, int reqModes)   使用HTML編碼這個(gè)字符串  static String  TextUtils.htmlEncode(String s)   

46. InputSream輸入流轉(zhuǎn)String字符串,Android開發(fā)工具類

在Android平臺(tái)上使用Java層處理I/O時(shí)主要使用流,這里Android開發(fā)網(wǎng)給大家一個(gè)方便的類,可以處理InputStream輸入流轉(zhuǎn)為String字符串,在效率上,我們使用了字符串拼接StringBuilder類減少內(nèi)存碎片以及BefferedReader類實(shí)現(xiàn)一個(gè)緩存。     private String Stream2String(InputStream is) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is), 16*1024); //強(qiáng)制緩存大小為16KB,一般Java類默認(rèn)為8KB
            StringBuilder sb = new StringBuilder();
            String line = null;
            try {
                while ((line = reader.readLine()) != null) {  //處理?yè)Q行符
                    sb.append(line + "\n"); 
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return sb.toString();
        }     }

47. layout資源包含,android開發(fā)必讀

有時(shí)候我們?cè)谝粋€(gè)Android程序中可能會(huì)復(fù)用布局文件,這時(shí)可以在一個(gè)xml文件中復(fù)用過(guò)去的布局文件,但是和常規(guī)的使用不同的是,需要加上類似包含頭文件一樣的include關(guān)鍵字,比如下面我們需要包含layout文件夾下的view.xml布局文件,需要<include layout="@layout/view" />  這樣下,完整的如下,大家可以試一試。 <?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    >  
<TextView    
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="@string/cwj" 
    />
<include layout="@layout/view" /> 
<include android:id="@+id/block" layout="@layout/item" />   <TextView    
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="@string/android123" 
    />  
</LinearLayout> 

48.Android控件開發(fā)之ToggleButton原理

在Android平臺(tái)上比較有特色的就是ToggleButton控件,雖然它的功能和CheckBox有些類似,但是他們的用處還是有一定的區(qū)別比如ToggleButton原本有圖片裝飾,通過(guò)ToggleButton可以很清楚的顯示某些狀態(tài)。它們均從Button為基類的CompoundButton中實(shí)現(xiàn),其真假事件從Checkable來(lái)實(shí)現(xiàn)。   public abstract class CompoundButton extends Button implements Checkable {
    private boolean mChecked; //狀態(tài)是否選中
    private int mButtonResource;
    private boolean mBroadcasting;
    private Drawable mButtonDrawable; //按鈕的圖標(biāo)
    private OnCheckedChangeListener mOnCheckedChangeListener; //選中狀態(tài)改變監(jiān)聽(tīng)
    private OnCheckedChangeListener mOnCheckedChangeWidgetListener;     private static final int[] CHECKED_STATE_SET = {
        R.attr.state_checked
    };     public CompoundButton(Context context) {
        this(context, null);
    }     public CompoundButton(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }     public CompoundButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);         TypedArray a =
                context.obtainStyledAttributes(
                        attrs, com.android.internal.R.styleable.CompoundButton, defStyle, 0);         Drawable d = a.getDrawable(com.android.internal.R.styleable.CompoundButton_button); 
        if (d != null) {
            setButtonDrawable(d);
        }         boolean checked = a
                .getBoolean(com.android.internal.R.styleable.CompoundButton_checked, false);
        setChecked(checked);         a.recycle(); //顯式的GC
    }     public void toggle() {
        setChecked(!mChecked);
    }     @Override
    public boolean performClick() {
              toggle();
        return super.performClick();
    }     public boolean isChecked() {
        return mChecked;
    }     public void setChecked(boolean checked) {
        if (mChecked != checked) {
            mChecked = checked;
            refreshDrawableState(); //更新當(dāng)前狀態(tài)的按鈕圖標(biāo)             if (mBroadcasting) {
                return;
            }             mBroadcasting = true;
            if (mOnCheckedChangeListener != null) {
                mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
            }
            if (mOnCheckedChangeWidgetListener != null) {
                mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);
            }             mBroadcasting = false;           
        }
    }     public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
        mOnCheckedChangeListener = listener;
    }     void setOnCheckedChangeWidgetListener(OnCheckedChangeListener listener) {
        mOnCheckedChangeWidgetListener = listener;
    }     public static interface OnCheckedChangeListener {
        void onCheckedChanged(CompoundButton buttonView, boolean isChecked);
    }      public void setButtonDrawable(int resid) {
        if (resid != 0 && resid == mButtonResource) {
            return;
        }         mButtonResource = resid;         Drawable d = null;
        if (mButtonResource != 0) {
            d = getResources().getDrawable(mButtonResource);
        }
        setButtonDrawable(d);
    }     public void setButtonDrawable(Drawable d) {
        if (d != null) {
            if (mButtonDrawable != null) {
                mButtonDrawable.setCallback(null);
                unscheduleDrawable(mButtonDrawable);
            }
            d.setCallback(this);
            d.setState(getDrawableState());
            d.setVisible(getVisibility() == VISIBLE, false);
            mButtonDrawable = d;
            mButtonDrawable.setState(null);
            setMinHeight(mButtonDrawable.getIntrinsicHeight());
        }         refreshDrawableState();
    }     @Override
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
        boolean populated = super.dispatchPopulateAccessibilityEvent(event);         if (!populated) {
            int resourceId = 0;
            if (mChecked) {
                resourceId = R.string.accessibility_compound_button_selected;
            } else {
                resourceId = R.string.accessibility_compound_button_unselected;
            }
            String state = getResources().getString(resourceId);
            event.getText().add(state);
            event.setChecked(mChecked);
        }         return populated;
    }     @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);         final Drawable buttonDrawable = mButtonDrawable;
        if (buttonDrawable != null) {
            final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
            final int height = buttonDrawable.getIntrinsicHeight();             int y = 0;             switch (verticalGravity) {
                case Gravity.BOTTOM:
                    y = getHeight() - height;
                    break;
                case Gravity.CENTER_VERTICAL:
                    y = (getHeight() - height) / 2;
                    break;
            }             buttonDrawable.setBounds(0, y, buttonDrawable.getIntrinsicWidth(), y + height);
            buttonDrawable.draw(canvas);
        }
    }     @Override
    protected int[] onCreateDrawableState(int extraSpace) {
        final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
        if (isChecked()) {
            mergeDrawableStates(drawableState, CHECKED_STATE_SET);
        }
        return drawableState;
    }     @Override
    protected void drawableStateChanged() { //android123提示狀態(tài)改變時(shí)需要更換按鈕的圖標(biāo)
        super.drawableStateChanged();
        if (mButtonDrawable != null) {
            int[] myDrawableState = getDrawableState();
            mButtonDrawable.setState(myDrawableState);
            invalidate();
        }
    }     @Override
    protected boolean verifyDrawable(Drawable who) {
        return super.verifyDrawable(who) || who == mButtonDrawable;
    }     static class SavedState extends BaseSavedState {
        boolean checked;              SavedState(Parcelable superState) {
            super(superState);
        }
        private SavedState(Parcel in) {
            super(in);
            checked = (Boolean)in.readValue(null);
        }         @Override
        public void writeToParcel(Parcel out, int flags) {
            super.writeToParcel(out, flags);
            out.writeValue(checked);
        }         @Override
        public String toString() {
            return "CompoundButton.SavedState{"
                    + Integer.toHexString(System.identityHashCode(this))
                    + " checked=" + checked + "}";
        }         public static final Parcelable.Creator<SavedState> CREATOR
                = new Parcelable.Creator<SavedState>() {
            public SavedState createFromParcel(Parcel in) {
                return new SavedState(in);
            }             public SavedState[] newArray(int size) {
                return new SavedState[size];
            }
        };
    }     @Override
    public Parcelable onSaveInstanceState() {
        // Force our ancestor class to save its state
        setFreezesText(true);
        Parcelable superState = super.onSaveInstanceState();         SavedState ss = new SavedState(superState);         ss.checked = isChecked();
        return ss;
    }     @Override
    public void onRestoreInstanceState(Parcelable state) {
        SavedState ss = (SavedState) state;
        super.onRestoreInstanceState(ss.getSuperState());
        setChecked(ss.checked);
        requestLayout();
    }
} 從上面來(lái)看我們知道CompuundButton的實(shí)現(xiàn)相對(duì)繁瑣了些,主要是考慮狀態(tài)是否已經(jīng)選中等情況的消息通知,Android開發(fā)網(wǎng)提醒大家而ToggleButton相對(duì)CompuundButton增加的給用戶而言主要是開關(guān)的文字顯示。 public class ToggleButton extends CompoundButton {
    private CharSequence mTextOn;
    private CharSequence mTextOff;
    private Drawable mIndicatorDrawable;     private static final int NO_ALPHA = 0xFF;
    private float mDisabledAlpha;
    public ToggleButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray a =
            context.obtainStyledAttributes(
                    attrs, com.android.internal.R.styleable.ToggleButton, defStyle, 0);
        mTextOn = a.getText(com.android.internal.R.styleable.ToggleButton_textOn);
        mTextOff = a.getText(com.android.internal.R.styleable.ToggleButton_textOff);
        mDisabledAlpha = a.getFloat(com.android.internal.R.styleable.ToggleButton_disabledAlpha, 0.5f);
        syncTextState();
        a.recycle();
    }     public ToggleButton(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.buttonStyleToggle);
    }     public ToggleButton(Context context) {
        this(context, null);
    }     @Override
    public void setChecked(boolean checked) {
        super.setChecked(checked);
        syncTextState();
    }     private void syncTextState() {
        boolean checked = isChecked();
        if (checked && mTextOn != null) {
            setText(mTextOn);
        } else if (!checked && mTextOff != null) {
            setText(mTextOff);
        }
    }     public CharSequence getTextOn() {
        return mTextOn;
    }     public void setTextOn(CharSequence textOn) {
        mTextOn = textOn;
    }     public CharSequence getTextOff() {
        return mTextOff;
    }     protected void onFinishInflate() {
        super.onFinishInflate();
        updateReferenceToIndicatorDrawable(getBackground());
    }     @Override
    public void setBackgroundDrawable(Drawable d) {
        super.setBackgroundDrawable(d);
        updateReferenceToIndicatorDrawable(d);
    }     private void updateReferenceToIndicatorDrawable(Drawable backgroundDrawable) {
        if (backgroundDrawable instanceof LayerDrawable) {
            LayerDrawable layerDrawable = (LayerDrawable) backgroundDrawable;
            mIndicatorDrawable =
                    layerDrawable.findDrawableByLayerId(com.android.internal.R.id.toggle);
        }
    }
    @Override
    protected void drawableStateChanged() {
        super.drawableStateChanged();
        if (mIndicatorDrawable != null) {
            mIndicatorDrawable.setAlpha(isEnabled() ? NO_ALPHA : (int) (NO_ALPHA * mDisabledAlpha));
        }
    }
}

49. AsyncTask實(shí)例代碼演示Android異步任務(wù)

上次我們講到了Android提供了一個(gè)較線程更簡(jiǎn)單的處理多任務(wù)的方法AsyncTask異步任務(wù)類,相對(duì)于線程來(lái)說(shuō)AsyncTask對(duì)于簡(jiǎn)單的任務(wù)處理更安全,其內(nèi)部的實(shí)現(xiàn)方法使用了Android的Handler機(jī)制,對(duì)于常見(jiàn)的文件下載可以使用AsyncTask類來(lái)處理,在Browser瀏覽器中就是用了該類下載Web服務(wù)器URL的Favicon圖標(biāo)。   首先Android123以簡(jiǎn)單的下載例子演示該類的大致結(jié)構(gòu),如下 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    protected Long doInBackground(URL... urls) {
        int count = urls.length;
        long totalSize = 0;
        for (int i = 0; i < count; i++) {
            totalSize += Downloader.downloadFile(urls);
            publishProgress((int) ((i / (float) count)100));
        }
        return totalSize;
    }
    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }
    protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }
}   最終我們執(zhí)行 DownloadFilesTask().execute(url1, url2, url3); 即可。   在Android瀏覽器中下載Favicon圖標(biāo)的實(shí)現(xiàn)如下: class DownloadTouchIcon extends AsyncTask<String, Void, Bitmap> {
    private final ContentResolver mContentResolver;
    private final Cursor mCursor;
    private final String mOriginalUrl;
    private final String mUrl;
    private final String mUserAgent;
    /* package */ BrowserActivity mActivity;     public DownloadTouchIcon(BrowserActivity activity, ContentResolver cr,
            Cursor c, WebView view) { //構(gòu)造方法
        mActivity = activity;
        mContentResolver = cr;
        mCursor = c;
        mOriginalUrl = view.getOriginalUrl();
        mUrl = view.getUrl();
        mUserAgent = view.getSettings().getUserAgentString();
    }     public DownloadTouchIcon(ContentResolver cr, Cursor c, String url) { //實(shí)現(xiàn)本類的構(gòu)造
        mActivity = null;
        mContentResolver = cr;
        mCursor = c;
        mOriginalUrl = null;
        mUrl = url;
        mUserAgent = null;
    }     @Override
    public Bitmap doInBackground(String... values) {   //返回Bitmap類型
        String url = values[0];         AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent);
        HttpGet request = new HttpGet(url);        HttpClientParams.setRedirecting(client.getParams(), true); //處理302等重定向問(wèn)題         try {
            HttpResponse response = client.execute(request);             if (response.getStatusLine().getStatusCode() == 200) { //如果OK
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    InputStream content = entity.getContent(); //將圖標(biāo)保存到InputStream中,因?yàn)槭嵌M(jìn)制內(nèi)容
                    if (content != null) {
                        Bitmap icon = BitmapFactory.decodeStream( //從流中取出Bitmap,這里使用了BitmapFactory類的靜態(tài)方法decodeStream
                                content, null, null);
                        return icon;
                    }
                }
            }
        } catch (IllegalArgumentException ex) {
            request.abort();
        } catch (IOException ex) {
            request.abort();
        } finally {
            client.close();
        }
        return null;
    }     @Override
    protected void onCancelled() {
        if (mCursor != null) {
            mCursor.close();
        }
    }     @Override
    public void onPostExecute(Bitmap icon) {
          if (mActivity != null) {
             mActivity.mTouchIconLoader = null;
        }         if (icon == null || mCursor == null || isCancelled()) {
            return;
        }     最終圖標(biāo)要保存到瀏覽器的內(nèi)部數(shù)據(jù)庫(kù)中,系統(tǒng)程序均保存為SQLite格式,Browser也不例外,因?yàn)閳D片是二進(jìn)制的所以使用字節(jié)數(shù)組存儲(chǔ)數(shù)據(jù)庫(kù)的BLOB類型         final ByteArrayOutputStream os = new ByteArrayOutputStream();
        icon.compress(Bitmap.CompressFormat.PNG, 100, os); //將Bitmap壓縮成PNG編碼,質(zhì)量為100%存儲(chǔ)
        ContentValues values = new ContentValues(); //構(gòu)造SQLite的Content對(duì)象,這里也可以使用raw sql代替
        values.put(Browser.BookmarkColumns.TOUCH_ICON,os.toByteArray()); //寫入數(shù)據(jù)庫(kù)的Browser.BookmarkColumns.TOUCH_ICON字段         if (mCursor.moveToFirst()) {
            do {
                mContentResolver.update(ContentUris.withAppendedId(Browser.BOOKMARKS_URI, mCursor.getInt(0)),values, null, null);
            } while (mCursor.moveToNext());
        }
        mCursor.close();
    }
}   本次Android開發(fā)網(wǎng)通過(guò)兩個(gè)AsyncTask類演示了多種類型的任務(wù)構(gòu)造,這里大家注意返回類型,本節(jié)演示了Android平臺(tái)上Content Provider、AsyncTask、Bitmap、HTTP以及Stream的相關(guān)操作,大家如何想很快提高開發(fā)水平其實(shí)只要理解Google如何去實(shí)現(xiàn)Android系統(tǒng)常規(guī)構(gòu)架就可以輕松入門谷歌移動(dòng)平臺(tái)。

50. Android自定義View實(shí)例AnalogClock源碼

針對(duì)Android底層View的直接構(gòu)造很多網(wǎng)友沒(méi)有實(shí)戰(zhàn)經(jīng)驗(yàn),本次Android開發(fā)網(wǎng)結(jié)合目前平臺(tái)開源代碼一起通過(guò)AnalogClock類來(lái)理解View的直接繼承。AnalogClock就是Home Screen上的那個(gè)帶有兩根指針的表盤類。它的實(shí)現(xiàn)我們直接從開源代碼可以了解到:   public class AnalogClock extends View {
    private Time mCalendar;     private Drawable mHourHand; //時(shí)針
    private Drawable mMinuteHand; //分針
    private Drawable mDial; //表盤背景     private int mDialWidth; //表盤寬度
    private int mDialHeight; //表盤高度     private boolean mAttached; //附著狀態(tài)     private final Handler mHandler = new Handler(); //定一個(gè)Handler類實(shí)現(xiàn)更新時(shí)間
    private float mMinutes;
    private float mHour;
    private boolean mChanged; //時(shí)間是否改變     public AnalogClock(Context context) {
        this(context, null);
    }     public AnalogClock(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }     public AnalogClock(Context context, AttributeSet attrs,
                       int defStyle) {
        super(context, attrs, defStyle);
        Resources r = mContext.getResources();
        TypedArray a =
                context.obtainStyledAttributes(
                        attrs, com.android.internal.R.styleable.AnalogClock, defStyle, 0);         mDial = a.getDrawable(com.android.internal.R.styleable.AnalogClock_dial); //加載表盤資源
        if (mDial == null) {
            mDial = r.getDrawable(com.android.internal.R.drawable.clock_dial);
        }         mHourHand = a.getDrawable(com.android.internal.R.styleable.AnalogClock_hand_hour); //加載時(shí)針圖片資源
        if (mHourHand == null) {
            mHourHand = r.getDrawable(com.android.internal.R.drawable.clock_hand_hour);
        }         mMinuteHand = a.getDrawable(com.android.internal.R.styleable.AnalogClock_hand_minute); //加載分針圖片
        if (mMinuteHand == null) {
            mMinuteHand = r.getDrawable(com.android.internal.R.drawable.clock_hand_minute);
        }         mCalendar = new Time(); //獲取當(dāng)前系統(tǒng)時(shí)間         mDialWidth = mDial.getIntrinsicWidth(); //獲取表盤圖片的寬度
        mDialHeight = mDial.getIntrinsicHeight(); //高度,同上
    }     @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();         if (!mAttached) {
            mAttached = true;
            IntentFilter filter = new IntentFilter(); //注冊(cè)一個(gè)消息過(guò)濾器,獲取時(shí)間改變、時(shí)區(qū)改變的action             filter.addAction(Intent.ACTION_TIME_TICK);
            filter.addAction(Intent.ACTION_TIME_CHANGED);
            filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);             getContext().registerReceiver(mIntentReceiver, filter, null, mHandler);
        }           mCalendar = new Time();         onTimeChanged();
    }     @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if (mAttached) {
            getContext().unregisterReceiver(mIntentReceiver); //反注冊(cè)消息過(guò)濾器
            mAttached = false;
        }
    }     @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {         int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int widthSize =  MeasureSpec.getSize(widthMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int heightSize =  MeasureSpec.getSize(heightMeasureSpec);         float hScale = 1.0f;
        float vScale = 1.0f;         if (widthMode != MeasureSpec.UNSPECIFIED && widthSize < mDialWidth) {
            hScale = (float) widthSize / (float) mDialWidth;
        }         if (heightMode != MeasureSpec.UNSPECIFIED && heightSize < mDialHeight) {
            vScale = (float )heightSize / (float) mDialHeight;
        }         float scale = Math.min(hScale, vScale);         setMeasuredDimension(resolveSize((int) (mDialWidth * scale), widthMeasureSpec),
                resolveSize((int) (mDialHeight * scale), heightMeasureSpec));
    }     @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mChanged = true;
    }     主要的繪圖重寫View的onDraw方法,我們可以看到通過(guò)canvas實(shí)例直接屏幕 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);         boolean changed = mChanged;
        if (changed) {
            mChanged = false;
        }         int availableWidth = mRight - mLeft;
        int availableHeight = mBottom - mTop;         int x = availableWidth / 2;
        int y = availableHeight / 2;         final Drawable dial = mDial;
        int w = dial.getIntrinsicWidth();
        int h = dial.getIntrinsicHeight();         boolean scaled = false;         if (availableWidth < w || availableHeight < h) {
            scaled = true;
            float scale = Math.min((float) availableWidth / (float) w,
                                   (float) availableHeight / (float) h);
            canvas.save();
            canvas.scale(scale, scale, x, y);
        }         if (changed) {
            dial.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
        }
        dial.draw(canvas);         canvas.save();
        canvas.rotate(mHour / 12.0f * 360.0f, x, y); //計(jì)算時(shí)針旋轉(zhuǎn)的角度,android123提示就是那個(gè)時(shí)針圖片的旋轉(zhuǎn)角度,直接反應(yīng)的就是表盤上那個(gè)針的時(shí)間
        final Drawable hourHand = mHourHand;
        if (changed) {
            w = hourHand.getIntrinsicWidth();
            h = hourHand.getIntrinsicHeight();
            hourHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
        }
        hourHand.draw(canvas);
        canvas.restore();         canvas.save();
        canvas.rotate(mMinutes / 60.0f * 360.0f, x, y); //同理,分針旋轉(zhuǎn)的角度         final Drawable minuteHand = mMinuteHand;
        if (changed) {
            w = minuteHand.getIntrinsicWidth();
            h = minuteHand.getIntrinsicHeight();
            minuteHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
        }
        minuteHand.draw(canvas);
        canvas.restore();         if (scaled) {
            canvas.restore();
        }
    }     private void onTimeChanged() {  //獲取時(shí)間改變,計(jì)算當(dāng)前的時(shí)分秒
        mCalendar.setToNow();         int hour = mCalendar.hour;
        int minute = mCalendar.minute;
        int second = mCalendar.second;         mMinutes = minute + second / 60.0f;
        mHour = hour + mMinutes / 60.0f;
        mChanged = true;
    }     private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { //監(jiān)聽(tīng)獲取時(shí)間改變action
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) {
                String tz = intent.getStringExtra("time-zone");
                mCalendar = new Time(TimeZone.getTimeZone(tz).getID());
            }             onTimeChanged(); //獲取新的時(shí)間
            invalidate(); //刷新屏幕,強(qiáng)制類調(diào)用onDraw方法實(shí)現(xiàn)分針時(shí)針的走動(dòng)
        }
    };    看了本例根據(jù),Android開發(fā)很簡(jiǎn)單吧,感興趣的網(wǎng)友可以為本程序加入一個(gè)秒針,不過(guò)Android123提醒網(wǎng)友的是可能對(duì)于電池,以及系統(tǒng)運(yùn)行效率產(chǎn)生一定的影響,不過(guò)作為練習(xí)大家可以試一試。

51. ArrayList LinkedList Set HashMap介紹

  在Android開發(fā)中我們經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行分類和操作,對(duì)于輕量級(jí)的數(shù)據(jù)存儲(chǔ)我們可能不需要?jiǎng)佑肧QLite或效率以及類庫(kù)不完善的XML,由于SharedPreferences不具備數(shù)據(jù)枚舉方法,如果僅僅是一個(gè)String或Int數(shù)組可以通過(guò)一個(gè)標(biāo)記分割設(shè)計(jì)外,我們還是主要來(lái)看看Android或者說(shuō)Java提供的基礎(chǔ)數(shù)據(jù)類型輔助類ArrayList LinkedList Set HashMap的介紹,如果你熟悉C++的STL或Boost庫(kù)可以略過(guò)本文。    在Java中提供了Collection和Map接口。其中List和Set繼承了Collection接口;同時(shí)用Vector、ArrayList、LinkedList三個(gè)類實(shí)現(xiàn)List接口,HashSet、TreeSet實(shí)現(xiàn)Set接口。直接有HashTable、HashMap、TreeMap實(shí)現(xiàn)Map接口。     Vector基于Array的List,性能也就不可能超越Array,并且Vector是“sychronized”的,這個(gè)也是Vector和ArrayList的唯一的區(qū)別。     ArrayList:同Vector一樣是一個(gè)基于Array的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優(yōu)越一些。Android123提示大家適用于順序性的查找     LinkedList:不同于前面兩種List,它不是基于Array的,作為鏈表數(shù)據(jù)結(jié)構(gòu)方式,所以不受Array性能的限制。當(dāng)對(duì)LinkedList做添加,刪除動(dòng)作的時(shí)候只要更改nextNode的相關(guān)信息就可以實(shí)現(xiàn)了所以它適合于進(jìn)行頻繁進(jìn)行插入和刪除操作。這就是LinkedList的優(yōu)勢(shì),當(dāng)然對(duì)于元素的位置獲取等方面就遜色很多。     List:         1. 所有的List中只能容納單個(gè)不同類型的對(duì)象組成的表,而不是Key-Value鍵值對(duì)。例如:[ tom,1,c ];         2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];         3. 所有的List中可以有null元素,例如[ tom,null,1 ];         4. 基于Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。 雖然Set同List都實(shí)現(xiàn)了Collection接口,但是他們的實(shí)現(xiàn)方式卻大不一樣。List基本上都是以Array為基礎(chǔ)。但是Set則是在HashMap的基礎(chǔ)上來(lái)實(shí)現(xiàn)的,這個(gè)就是Set和List的根本區(qū)別。      HashSet:HashSet的存儲(chǔ)方式是把HashMap中的Key作為Set的對(duì)應(yīng)存儲(chǔ)項(xiàng),HashMap的key是不能有重復(fù)的。HashSet能快速定位一個(gè)元素,但是放到HashSet中的對(duì)象需要實(shí)現(xiàn)hashCode()方法0。     TreeSet:將放入其中的元素按序存放,這就要求你放入其中的對(duì)象是可排序的。TreeSet不同于HashSet的根本是TreeSet是有序的。它是通過(guò)SortedMap來(lái)實(shí)現(xiàn)的。     Set總結(jié): 1. Set實(shí)現(xiàn)的基礎(chǔ)是Map(HashMap); 2. Set中的元素是不能重復(fù)的,如果使用add(Object obj)方法添加已經(jīng)存在的對(duì)象,則會(huì)覆蓋前面的對(duì)象,不能包含兩個(gè)元素e1、e2(e1.equals(e2))。     Map是一種把鍵對(duì)象和值對(duì)象進(jìn)行關(guān)聯(lián)的容器,Map有兩種比較常用的實(shí)現(xiàn): HashTable、HashMap和TreeMap。     HashMap也用到了哈希碼的算法,以便快速查找一個(gè)鍵,     TreeMap則是對(duì)鍵按序存放,因此它有一些擴(kuò)展的方法,比如firstKey(),lastKey()等。     HashMap和Hashtable的區(qū)別。 HashMap允許空(null)鍵(key)或值(value),由于非線程安全,效率上可能高于Hashtable。 Hashtable不允許空(null)鍵(key)或值(value)。    有關(guān)更多實(shí)用的Android開發(fā)技巧我們將在后面的文章中著重介紹。

52. ConditionVariable Android線程同步

ConditionVariable類位于android.os.ConditionVariable,它可以幫助Android線程同步。在SDK上的介紹ConditionVariable不同于標(biāo)準(zhǔn)Java位于java.lang.Object wait() 和 notify() ,這個(gè)類可以等待自己,這就意味著 open(), close() 和 block() 可能會(huì)假死 ,如果使用ConditionVariable類的open()在調(diào)用 block() 之前, block() 將不會(huì)阻塞,相反將會(huì)返回立即。    該類一共有4個(gè)方法    boolean  block(long timeout)
  阻止當(dāng)前線程知道條件是open,或直到超時(shí),這里參數(shù)long timeout為超時(shí)設(shè)置,Android123提示大家如果你們從事過(guò)Win32開發(fā),這個(gè)方法類似DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds); 函數(shù)。   void  block()
  阻止當(dāng)前線程知道條件 open ,是上面的無(wú)超時(shí)等待重載版本。   void  close()
重置條件為 close狀態(tài)。 void  open()
Open條件,釋放所有線程的阻塞.   ConditionVariable在創(chuàng)建時(shí)還有一種構(gòu)造方法是 public ConditionVariable (boolean state) ,如果為true,默認(rèn)時(shí)為opened,如果為false則是closed. ,默認(rèn)public ConditionVariable () 為close().

53.Android開發(fā)之Eclipse調(diào)試技巧

使用Google提供的ADT插件可以在Eclipse上很輕松的調(diào)試Android程序,我們切換到DDMS標(biāo)簽,選擇“Devices”標(biāo)簽,我們可以看到會(huì)出現(xiàn)類似下面的Debug Process(調(diào)試進(jìn)程)、Update Threads(更新線程)、Update Heap(更新堆)、Cause GC(引起垃圾回收)、Stop Process(停止進(jìn)程)、Screen Capture(屏幕截圖)、Reset adb(重啟Android Debug Bridge)   這里我們就可以很好的觀察Android程序運(yùn)行時(shí)的各種狀態(tài),比如進(jìn)程信息、線程分析、堆內(nèi)存的占用,結(jié)束一個(gè)進(jìn)程,當(dāng)然這些操作都是在DDMS框架下進(jìn)行的,日程開發(fā)的程序是無(wú)法執(zhí)行調(diào)用的。如果遇到adb調(diào)試橋運(yùn)行不穩(wěn)定時(shí)可以選擇reset adb來(lái)重新啟動(dòng)

原文來(lái)自:tbkj
? 日本欧美在线高清| 亚洲黄色激情视频网站| 污视频欧美一区二区| 欧美精品一级一区| 亚洲日韩欧美小视频精品区| 乱伦日本亚洲中文| 日本中文字幕一区二区三区在线| 亚洲欧美一区二区三区中文字幕| 欧美日韩中文字幕久久伊人| 毛茸茸BBwBBw中国妓女| 亚洲成人午夜精品电影| 国产电影久久精品| 日韩韩激无码一级毛片毛片| 国内精品自线在拍精品| 樱桃污污APP免费下载| 欧美96高清乱妇视频| 超清无码不卡无码二区无码三区| 综合欧美一区二区三区| 中文字幕乱码一区久久| 男人天天在线视频| 亚洲成人色图第一页| 亚洲精品成?人在线观看| 一级黄日本C爱视频| 日韩三区二区北岛玲| 东京热aⅤ无码一区二区| 精品无码国产一区二区三区av| 极品尤物小仙女自慰粉嫩大赏| 精品正在播放国产| 韩国《秘密爱》大尺度| 欧美老人巨大xxxx做受视频| 成人3D无遮H动漫| 亚洲啪AV永久无码精品毛片 | 欧美在线一二区| 亚洲精品91一区二区三区| 曰韩国产高清无码| 国产免费破外女真实出血视频aⅴ| 影音先锋在线免费资源| 男生女生一起愁愁愁很痛| eeuss秋霞成人影院| 久久性精品视频99| 一道本免费三级片| 四虎在线免费播放| 趴着办公室被老板们玩弄视频| 亚洲成人av电影在线观看| 国产精品一级A精品特黄A| 日本高清一区免费中文视频| 日本阿v手机不卡在线观看视频| 亚洲欧美日韩图片| 狠狠色噜噜狠狠狠777| 亚洲日本va中文字幕久久| 92午夜福利少妇视频| 久久美女福利视频 | 99国产精品久久久久久久久久| 娇小小小泬xxxx女人| 日韩四方Av无码久久Av| av一区二区在线免费下载| 亚洲国产在一区二区三区| 免费 国产 无码久久久| 久久免费视频播放中文| 污视频欧美一区二区| 国产91在线九色| 欧美亚洲综合免费| 惠民福利国产精品v欧美精品v日韩精品| 亚洲综合国产精品一区| 91麻豆精品國產91久久久久久久久| 午夜精品视频一区二区在线观看 | 337p日本欧洲亚洲大胆在线| 人妻中文无码久热丝袜| 国产榨精超级爽footjob| 高清国产人妇牲交视频| 日本女人牲交视频免费看| 亚洲日韩线精品一区一区一区| 国产精品系列在线观看| 国产免费看18禁止观看网站色欲| 国产区精品区| 国产电影在线观看亚洲日本| 国产亚洲美日韩AV中文字幕| 国产一区二区三区a片在表| 乱伦亚洲精品自拍| 秋葵视频色色软件免费| 无码影片成人网站在线观看| 在线成年视频人网站观看新| 国产无遮挡又黄又爽又色又刺激| 日韩1024看片永久免费 | 国产精品成人69xxx| 日韩一级无码中文字幕| 秋霞精品国产手机在线观看| 精品导航综合| 国产极品喷水视频| 找一中国又粗又大又长毛片| 91香蕉app下载免费版苹果| 国产综合色在线视频播放线视| 亚洲Ⅴa中文字幕欧美不卡| 亚洲?V片劲爆在线观看| 陥没乳首亚洲精品| 一个人看的免费观看日本| 亚洲成人色图第一页| 无码中文中字专区免费视频| 亚洲中文精品日韩| 国产高清在线视频伊甸园| 一区二区三区电影乱码在线观看 | 2288欧美理论在线观看| 国产美女精品a在线鸭王| 亚洲播放一区二区| avtt天堂网手机版永久资源| 青青国产成人综合在线| 黄色日本韩国国产| 国产高清在线视频伊甸园| 五月丁欧美国产高清视频| 在线看免费福利影院| 亚洲一本在线视频| 国产精品一区二区 在线观看| 欧美亚洲精品小说在线阅读| 在线精品视频raPPer| 欧美亚洲 综合在线| 激情综合国产成人AV| 2020人妻视频免费观看| 亚洲三级在线观看视频| 乳夹震动走绳play调教| 国产精品一色一情一伦| 午夜福利国产极品福利| 精品久久久久久AAA妇女自卫| 亚洲一区二区福利在线| 一区二区视频在线导航观看| 欧美韩国中文字幕| 国语自产拍在线视视频| 中文字幕在线视频播放不卡| 亚洲国产精品久久精品久久| 国产成人精品日产在线观看| 一级a一片久久无码| 亚洲爽妇网欧美亚洲欧美| 九九久久免费视频| 三级片s色国产视频精品 | 91精品国产色综合久久蜜臀| JK白丝开裆被疯狂输出| 免费视频网站一级人爱视频| 激情免费精品国产| 日本少妇老师激情24P| 性开放国产精品按摩av| 午夜三级a三点| www.无码一级视频| 麻豆亚洲AV成人无码久久精品精品国产一区二区三区AV 性色 | 午夜一级真人免费毛片在线视频| 欧美肥胖老太VIDEOS另类| 欧美久久久久久久一区二区三区 | 亚洲中文精品日韩| 无码中文中字专区免费视频| 午夜少妇私人影院在线观看| 99久久精品免费观看欧美 | ⅩXX欧美另类重口0| 天堂国产永久综合人亚洲欧美| 曰本黄页在线观看| 日本乱码中文字幕在线视频| 惠民福利亚洲欧美另类国产中文 | 动漫亚洲欧洲视频一区| 2019中文字幕视频在线观看| 亚洲天堂有码在线视频| 久久免费看少妇A级特黄| 国产二区日韩AV制服丝袜| 少妇大叫太大太粗太爽了a片 | 精品国内自产午夜拍在线观看视频| 国产一区二区电影久久精品| 麻豆精品久久久久久久99蜜桃| 久久国产精品推油| 国产在线国语精品| 国产欧美日韩精品九九久久| 亚洲无码精品推荐| 狼天天狼天天香蕉综合网互動交流 | 国产一区二区三区免费观看不卡| 久久综合给合久久97色| 最新最快av无码中字在线| 老牛视频国产一区在线观看| 三级国产爽死你个荡货| 日本精品91久久久| 一区二区三区免费版在线| 国产高清自产拍Av在| 午夜精品视频一区二区在线观看| 91香蕉视频下载观看| 免费视频在线观看69| 亚洲日韩精品东京热一区| 丁香蜜桃综合cb| 免费无遮羞大尺寸的动漫片| 欧美做A视频一区| 国产成人综合AV网址| 国产熟睡乱子伦午夜视频麻豆| 亚洲欧洲日韩另类在线| 中国少妇内射xxxhd免费| 色情无码永久免费视频软件| 性感美女激情掰穴| 强奷乱码中文字幕熟女网站| 精品久久成人区二区| 午夜精品理论片免费观看女友| 国产精品成人免费视频| 在线观看av永久免费| 国产免费踩踏视频网| 一夲无码中文字幕在线| 中文字幕二三区不卡| 老师的大兔子好软水真的好多软件| 亚洲aⅤ无码专区国产乱码不卡| 国产日本亚欧在线观看| 黄色三级在线观看| 国产精品系列在线观看| 国产午夜激无码av毛片久久| 熟女aV一区二区在线| 99精品热线在线观看免费视频| 国产福利小短片在线视频| 猫咪av最新永久网址无码| 成人免费一区二区三区牛牛| 亚洲美女销魂久久| 国产精品一区二区 在线观看| 国产精品免费AⅤ片在线观看男女| 久久久国产99久久国 | 又色又无遮挡的视频| 久久香蕉网免费| 57pao国产成视频永久免费看| 91精品福利在线观看播放| 在线观看国产丝袜控网站| 国产?级理论片无码老男人| 国产农村1级毛片| 国产另类在线一区二区 | 波多野结衣无码高清在线观看| JK白丝开裆被疯狂输出| 欧美国产亚洲18| 98超碰人人与人人| 91精品国产色综合久久蜜臀| av无码中文字幕在线天| 无码制服人妻丝袜ol在线| 18禁全彩肉肉无遮挡彩色| 在线观看男女AV免费网址| 在线视频播放免费视频| 激情视频激情小说激情图片| 亚洲国产高清理论片| 97人妻无码免费视频| 中日韩成人影院免费观看| 免费看片日本| 亚洲第一色国产剧情| 精品亚洲成?人片在线观看少妇| 国产TV欧美TV亚洲Tv| 亚洲日本va午夜在线电影极品动画| 国产精品久久久久久男贼秘图| 找一中国又粗又大又长毛片| 这里只有精品视频播放| 日韩亚洲欧美一区噜噜噜| 亚洲波多野结衣一区二区中出| 日国在现视频夜观欧美| 全免一级久久久久片| 麻豆十国产十又黄十祼体视频 | 亚洲精品视频第一页| 久久综合色老色| 成人a级毛片免费播放| 精品国产三级a在线观看欧美| 小草在线观看免费视频播放| 在线视频精品人妻| 欧美三级网络在线观看| 成人久久三人毛片最新| 老司机永久网站免费视频真人| 手机在线视频观看| 无码免费毛片一区二区| 亚洲午夜在线网址网址| 亚洲毛片无码乱妇p50| 亚洲欧美日韩一区二区自拍 | 国产91制片激情在线| 无码精品?∨在线观看免费| 国产国语日韩亚洲欧美中文字久久不卡幕影视精品| 国产婷婷久久婷婷| 她的两片蚌肉慢慢张开| 国产一区二三区无码免费| 九九九热视频| 国产不卡成人手机在线| 久久久精国产精品720| 极品虎白女在线观看一线天| 伊人情人网 综合| 欧美一级黄色电影免费| 在线人成亚洲播放网站| 国产?V无码专区亚洲精品| 自拍偷自拍亚洲精品被多人伦好爽 | 巨爆乳中文字幕免费专区| 国产高清美女一级毛片| 红杏国产成人精品视频| 国产婷婷久久婷婷| 饥渴人妻精油按摩无码专区| 国产美女在线精品观看福利| 疼痛有声音免费下载app大全| 亚洲日本欧洲二区精品| 国产美女一级特黄大片大全 | 日韩欧美中文字幕在线播放流| 国产免费播放一区二区三区| JK白丝开裆被疯狂输出| 99在线精品视频在线观看3| 最新国产成人av网站网| 国产精品一区二区人成毛片 | 精品久久久久久AAA妇女自卫| 亚洲欧洲动漫av| 三上悠亚网站在线观看一区二区 | 色综合一区二区三区体内射精| 久久国产精品推油| 中文字幕日产乱码偷在线| 天堂一日韩中文字幕| 挽起裙子迈开腿开扑克软件| 精心挑选国产精品无码专区在线观看 | 99re66热这里只有精品4| 亚洲AV永久无码精品爱妃影视 | 亚洲欧洲国产经典大片| 国产一区二区不卡在线播放福利| 91精品国产自产91精品资源| 男人天堂网2020| 边吃奶边摸下很爽视频| 亚洲精品国产一夜情在线观看 | 成人黄色特别网站视频s色| 女教师一级特黄毛片| 欧美日本一区二区三四区| 国产精品欧美一区麻豆系列| 伊人免费在线1| 又黄又爽又色视频免费| 欧美日韩日产免费网站看| 污软件在线观看软件| 久久青青草原精品综合免费| 国产无码精品三区| 国产日韩免费观看| 欧美日韩国产不卡在线观看视频| 亚洲激情古典武侠另类人妻少妇久久| A级毛片高清免费色网在线播放| 日本丰满大乳乳乳| 免费的无码人妻视频| 亚洲精品视频第一页| 亚洲精品电影天堂网| 亚洲一级天堂作爱av| 欧美在线暴力性xxxx| 人妻av无码专区久久| 亚洲日本欧洲二区精品| 亚洲最大在线网站| 国产系列高清精品第一页| 免费看a精品无码| av无码中文字幕在线天| 久久精品女人天堂| 色欲av蜜臀AV永久无码精品 | 人妻中文字幕aⅤ精品视频| 精品人妻系列无码专区久久| 久久成人综合亚洲一区有码| 欧美一级A欧美黑人AAAA| 男友把舌头都伸进我的嘴巴里| 日本阿v手机不卡在线观看视频 | 先锋影音伦理在线| 无遮挡又黄免费视频| 久久久久亚洲AV成人网人人网| chinasex喷白浆videos自慰| 精品欧美久久三级| 九九热精品在线观看视频| 福利日木AV无码专区亚洲AV毛片| 亚洲av成人在线观看高潮| 变态另类av一区二区三区| 亚洲乱码av乱码国产精品| 波多野结衣无码中文字幕在线视频| 欧美日韩国产不卡在线观看视频| 免费一级毛片清高播放的在线直播平台 | 精品亚洲成?人片在线观看少妇| 日本精品91久久久| 男生女生一起嗟嗟嗟很痛素材| 国产91精品嫩草 | 国产片3p视频在线观看| 手机在线视频观看| 大j8黑人w巨大888a片| 亚洲少妇精品自拍av| 国产另类小说在线视频| 狠狠色丁香久久综合频道日韩| 亚洲精品国产一夜情在线观看 | 麻花豆剧国产MV免费版特色| 国产女人夜夜春夜夜爽免费看| 国产美女一级特黄大片大全| 99丁香久久中文缴情| 中文字幕在线永久播放| 国产一级做a爱免费| 四虎国产精品免费久久影院| 五月婷婷六月丁香综合| 久久国产99久久国产久麻豆| 午夜一区二区三区中文字幕| 日韩欧美国产三级| 无码免费毛片一区二区| 国产无套内谢国语对白| 免费看A级毛片视频| 欧美成人精品第一区二区三区| 国产麻豆剧果冻传媒在线观看| 国产免费播放一区二区三区| 国产高清免费精品| 欧美男男gv免费网站观看| 嫩逼骚乳舔穴大鸡巴一区二区| 欧美激情在线精品| 学生的粉嫩小泬图片| 日韩欧美大码a在线观看 | 99精品国产综合久久精品自在| 国产竹菊伦精品一区二区久久久| 国产三级自拍亚洲性爱在线| 性短视频在线观看免费不卡流畅| 狠狠干狠狠干香蕉视频| 美女扒开尿孔让男人捅| 国产一卡2卡3卡4卡新区乱码在| julia奶水涨喷在线播放| 欧美亚韩一区二区三区| 锵锵锵锵锵免费完整观看动漫| 亚洲综合一区二区AV| 粉嫩的18在线观看极品精品| 337p日本欧洲亚洲大胆在线| 亚洲av日韩av高潮喷无码| 精品一区二区午夜福利| 久艾草国产成人综合在线视频| 久久99热精品免费观看动漫| 日韩欧洲影视网经典电影在线观看免费观看| 欧美一级免费网址| 国产成人久久综合一区日韩在线观看| 欧美理论高清理论在线看| 精品国产成人麻豆| 国产无遮挡又黄又爽又舒服| 午夜精品久久久久久毛片欲望| 久久中文字幕无码不卡| 少妇大叫太大太粗太爽了a片| 污污午夜福利夜夜爱网站| 成年人电影中文字幕 | 久久美女福利视频| 影音先锋男人资源网站最新资源| 国产在线观看91香蕉| 性短视频在线观看免费不卡流畅| 图片区偷拍区小说区视频| 亚洲欧美中文字日韩| BLACKED欧美金发大战黑人VIDEO | 国产欧美日韩亚洲精品区gif动图 一级午夜理论片日本中文在线 | 十八禁漫画免费网站在线观看| 精品亚洲gv无码一区二区三区| 无码人妻丝袜视频| 国产高清美女一级毛片| 粉嫩AV一区二区三区在线| 亚洲人妖二区三区| 欧美日韩国产第1页| a毛片成人免费看视频| 欧美理论高清理论在线看| av天堂亚洲色图在线| 福利黄色国产视频网站在线观看| 亚洲AV无码国产精品色字幕综合 | 午夜中国女人性在线| ol丝袜高跟秘书在线观看| 国产呦av在播放| 少妇挑战三个黑人叫声好凄惨| 台湾A片视频在线观看6666| 国产精品人成在线观看1一| 手機看片福利永久| 国产精品成人免费视频| 97人人超碰人人| 日韩欧美中文字幕在线播放流| 日本无码h肉3d动漫动态图| 99国产成人精品无码青春| 国产精品系列在线观看| 日本三及在线特黄一区二区| 日韩人妻高清久久中文字幕| 欧美日韩人妻制服丝袜无在线视频 | 欧美成人性受电影XXXX黑人XYX| 亚洲AV午夜成人一区二区| 亚洲另类 小说 国产精品| 国产又粗又爽又大又长免费视| 日本亞洲一區二區三區| 婷婷五月丁香加勒比在线| 欧美性xxxx丰满极品少妞| 对白射精在线播放| 精品无码免费一二三四区| 美女胸又大又黄又www的网站| 日韩av网站大全在线| 婷婷五月丁香加勒比在线| 国产精品竹菊成人影视| 超碰综合久久 | 日本欧洲亚洲精品大胆| 久久精品人人妻人人澡人人爽| 亚洲日本中文电影在线观看| 办公室爆乳在线 | mm131美女爱爽爽爽做视频| 丰满人妻少妇一区二区三区| 91青青青精品国产碰在线观看 | 亚洲911精品一区二区| 欧美黑人XXXX一区二区三区| 久久无码喷水亚洲av专区| 冲田杏梨在线播放一区二区不卡| 四虎在线免费播放| 亚洲精品成人久久?v中文字幕| 国产精品色哟哟网站高清| 色噜噜亚洲一区二区| 男生女生一起愁愁愁很痛| 亚洲欧洲动漫av| 亚洲国产对白91| 中文日产无乱码AV在线凹凸| 男女日批视频| 亚洲日韩AV在线中日综合| 亚洲欧美日韩第一区在线观看| 老牛视频国产一区在线观看| 成年人在线免费观看视频播放| 国产97超级碰碰视频| 亚洲AV永久无码精品爱妃影视| 无遮挡一级毛片视频| heyzo北条麻妃在线播放| 国产TV欧美TV亚洲Tv| 久久精品国产亚洲AV电影网| 樱桃视频成人| 亚洲一区美女视频| 欧美日韩在线一区在线| 亚洲Aⅴ无码精品色午夜蜜芽| 不充钱看污污视频| 2020最新中文字幕在线| 久久国产视频老熟女| 免费一级毛.片国外| 亚洲五月综合网色九月色| 久久美女福利视频| 97视频在线精品国自产拍咪咪爱| 91精品免费在线| 黃色片免費觀看網站| 国产精品白丝自| av羞羞漫画在线观看| 免费国产va在线观看| avtt天堂网手机版永久资源| 国产香蕉成人综合精品视频| 欧美性a在线香蕉| 男女深夜无套内射在线观看| 国产免费播放一区二区三区| 亚洲国产精品一在线观看av| 永久免费A片在线观看全网站| 中国一级欧美三级| 金发亚洲一区在线观看| 欧洲精品综合亚洲| 中文在线А天堂中文在线新版| 17c丨国产丨精品入口| 一级毛片免费视频成人欢看 | 最新一本在线无码视频| 男女日批视频| 欧美精品在线观看日本| 免费国产女王调视频在线观看| 国产精品免费成人| 久久久久精品av123| 琪琪电影午夜理论片八戒八戒| 秋霞成人欧美手机鲁丝片| 日本高清不卡一区二区三| 国产日本亚欧在线观看| 国产多人群p大全| 盗盗摄婷婷精品一区二区| 久久伊人精品毛片| 一级黄片国产毛片| 国产无遮挡无码视频在线观看不卡| 女人爽得直叫免费视频| 久久精品国产亚洲?v香蕉片| 东北乱国产对白刺激视频| 美女老黄一区二区| 粉嫩AV一区二区三区在线| 国产在线视频福利一区二区| 一级毛片视频在线看| 一区二区亚洲区欧美区| 日韩?V无码一区二区三区不卡 | 欧美人妻无码A级视频| 点击进入你的世界在线观看国产精品无 | 国产精品视频一区二区三区不卡| 免费A级毛片在线看| 女教师一级特黄毛片| 最新国产在线播放| 香蕉视频的永久观看视频| 爆乳精品久久一区二区| 日韩精品理论一区二区| 国产三级黄色免费| 欧美一级视频97| 东京热欧美精品久久久| 亚洲欧美日韩第一区在线观看| 亚洲AV永久无码精品国产片| 国产一级电影在线观看| 国产精品亚洲综合欧美第一区| 9视频国产1在线观看免费| 免费观看亚洲毛片| 亚洲午夜精品一区二| 伊伊人成亚洲综合人网7777综合人妻久久一区二区精品 | 国产男人女人口高清在线播放| 最新国产在线播放| 影音先锋成人网站| 国产日韩欧美视频免费观看一区二区三区 | 91成人免费观看| 久久国产A∨一二三| 亚洲综合自拍精品在线| 国产无码乱伦一区| 国产成人无码18禁午夜福利免费| 日韩av网站大全在线| 日日av色欲香夭综合网| semm亚洲欧美在线高清| 国产天天强奸三级片| 午夜福利自怕| 午夜三级a三点| 每日更新无码播放免费| 免费视频在线观看69| 看亚洲一级黄色片| 国产性爱在线观看欧美亚洲黄片| 亚洲无码av在线高清| 色吊絲中文字幕| AV无码久久无遮挡国产麻豆| 日本国产欧美亚洲精品一区二区| 亚洲美腿丝袜无码专区| 亚洲毛片无码乱妇2| 久久綜合本色宗合一本色| 女人爽到喷水的视频免费看| 欧美在线一二区| 亚洲Av人片在线| 粉嫩av中文一区二区三区| 亚洲无码av在线高清| 日国在现视频夜观欧美| 老子无码午夜中文字幕影| 日本亚洲免费播放| 久久国产精品推油| 亚洲免费成人av电影| 9l视频自拍九色9l视频打屁股| 国产欧美日韩直播在线| 亚洲欧美色图国产成人精品在线| 干国产美女在线| 久久HEZYO久综合亚洲色| 亚洲一本在线视频| 自拍2区国产精品| 香蕉视频免费版在线高清全集| 中文国产精品久久久| 国产精品成人va在线观看网| 综合偷自拍亚洲乱中文字幕| 国精产品999国精产品视频| 曰韩一区二区三区视频| 无码制服人妻丝袜ol在线| 在线观看97无码视频| 色情无码永久免费视频软件| 久久午夜精品理论片| 国产成人无码18禁午夜福利免费| 国产 黄色三级电影高清免费观 | 最近在线观看免费完整版高清电影| 国产电影久久精品| 少妇激情出轨100篇| 色婷婷樱桃Av一区二区| 中文在线А天堂中文在线新版| 亚洲少妇精品自拍av| 曰韩无码av久久久免费| 狠狠干天天干| 国产高清三级在线精品福利| 日本二区不卡视频中文字幕| 亚洲热妇无码A∨在线播放| 无码一级毛片人妻开车黄| 91视频久久久播免费观看| 无码高潮爽到喷水视频| 国产精品亚洲?∨天堂不卡| 欧美激情黄色一级片| 中文字幕黄色av首页网站| 久久精品国产国产毛片| 亚洲国产AV综合一区二区| 久久精品人人妻人人澡人人爽| 超碰在线公开免费| 国产欧美日韩精品一二三区| 午夜福利精品在线| 成人毛片女人毛片| 精品无码AV吞精AⅤ久久| 可以看的毛片网站| 办公室肉色丝袜上司| 韩国《秘密爱》大尺度| 中文天堂WWW网在线最新版| 中文亚洲日韩欧美中字| a片强制妇女高潮成人片在线观看| 欧美高清在线视频一区二区| 18禁全彩肉肉无遮挡彩色| 亚亚洲一区日韩高清中文字幕亚洲| 免费韩少妇无码一区二区影片| 99久久国产一区二区 | 国产精品美大片在线观看| 欧美黄片一区二区| 全部免费毛片免费播放| 99久在线精品99re8热视频688| 午夜成人福利影院亚洲AV一二区| 波多野结衣无码中文字幕在线视频| 在线播放中文无码AV有码| 多人伦交性欧美精品欧| 巨胸喷奶水www视频网站| 国产无遮挡无码视频在线观看不卡| 无码一级毛片人妻开车黄| 视频国产91麻豆免费观看| 亚洲?v日韩?v高潮无码专区| 天天爽夜夜爽人人爽一区欧美Ⅴ亚洲Ⅴ日韩Ⅴ最近更新一区 | avtt天堂网手机版永久资源| 精品导航综合| 无码动漫 一区二区三区| 日韩精品一区二区三区入口| 欧美午夜视频亚洲| 欧美国产日韩欧美在线视视频| 国产TV欧美TV亚洲Tv| 影音先锋aⅴ字幕| 五月激情六月丁香| 精品综合日本国产 | 最新国产自产在线播放| 新版天堂资源中文8在线8| 国产亚洲欧美日韩色| 成人激情中文字幕一区二区 | 久久伊人精品毛片| 免97狼人久久伊人精品| 国产精品久久久久无码a麻豆 | 麻豆传媒还能在哪里看| 国产三区精品| 骑士导航第一精品亚洲| 87影院在线观看视频在线观看| 中日韩中文字幕无码一本| 国产又粗又爽又大又长免费视| 99久久99久久久精品之| 中文字幕精品国产片在线观看| 国产中文欧美在线观看| 一级黄片免费播放| 久久影院午夜伦手机不四虎卡| 99re99视频在线观看| 亚洲高清最新AV网站| 三级4级全黄60分钟| 91久久亚洲精品| 亚洲欧洲国产经典大片| 久久国产免费福利永久| 大乱婬交欧美视频一区直播| 久久久精品永远的精品| 中文字幕黄色av首页网站| 蜜桃久久精品久久| 一级片麻豆狼人插在线| 青木玲中文字幕一区二区| 国产成人午夜福利不卡| 啊轻点灬太粗嗯太深了快三| 91久久亚洲欧美一区二区| 亚洲成在线观看| 99国产精品视频无毒不卡| 最近高清中文字幕在线国语5| 一级午夜理论片日本中文在线| 国产精品无码XXXXX| 國產午夜亞洲精品不卡電影| 图片区亚洲色图| 一区二区在线观看毛片| 粗大的内捧猛烈进出视频在线| 久久精品人人妻人人澡人人爽| 日本五月婷婷手机在线观看| 国产后入内射骑乘| 一区二区三区高清视频精品| 成人影院久久| 久久午夜精品理论片| 欧美肥胖老太VIDEOS另类| 99R在线观看视频精品| a级免费在线观看国产在线拍揄自揄视频不卡99 | 国产精品视频视频久久| 狠狠干五月天亚洲欧美黄色 | 真人一级真人片全部免| 国产成人亚洲欧美一级在线| 成人国产在线小视频| 国产毛片久久久久久久久久久久| 三级片网址在线观看| 午夜福利免视频100集2024| 曰韩国产高清无码| 中文字幕一二区二三区| 无码制服人妻丝袜ol在线| 蜜桃麻豆www久久囤产精品| 131美女视频爱做国产| 日本中文字幕一区二区三区在线| 久久一级免费全裸视频| 国产a精彩视频精品亚洲观看不卡欧| 87影院在线观看视频在线观看| 91精品国产91久久久无码伦| 久久精品亚洲国产精品亚洲蜜月| 91青草亚洲视频免费| 污视频欧美一区二区| 99久久国产一区二区| 国产情侣自拍AV| 亚洲v?久久久噜噜噜久久刺激| 毛片一级完整版免费| 国产精品毛片一区久久久| 欧美成人精品福利在线观看| 日韩无码视频高潮喷吹| 91国内揄拍国内精品人妻九色| 伊人直播网站| 欧美性猛交黑人粗大| 国产免费播放一区二区三区| 大臿蕉香蕉大视频国产| 久久中文字幕亚洲| 4399在线观看免费高清电视剧| 国产又爽又色又刺激视频| 国产欧美三级在线观看| 五月丁香激情综合亚洲麻豆精品| 女人与公豬交交30分钟视频| 国产国语精彩对白在线观看| 中文字字幕在线中文乱码不卡新二 | 日韩av一区麻豆| 秀色直播IOS特黄片| 琪琪热码在线中文字幕| 久久一级免费全裸视频| 在线观看国产丝袜控网站| 国产强被迫伦姧在线观| 99尹人香蕉國產免費天天拍| a卩亚洲黄色免费片| 久久伊人精品毛片| 亚洲熟女av综合网| 亚洲天堂有码在线视频| chinese老女人老太婆china| 国产精品国产三级毛片在线专区 | 欧美日韩在线看区一二区| 天堂AV无码大芭蕉伊人AV不卡| 国产欧美日韩亚洲精品区gif动图 一级午夜理论片日本中文在线 | 国产一区一级观看| 综合欧美一区二区三区| 久久人人超碰99国产精品| 成人福利午夜A片公司| 久久免费看少妇A级特黄| vva51精产一二三区 | 免费一级无码婬片在线| 欧美一区二区三区高潮| 综合激情欧美亚洲另外类自拍| 亚洲第一情网站久久网| 色哟哟国产精品免费观看网站| 理论片高清免费理论片毛毛片| 麻豆国产91在线播放 | 成人免费视频软件网站| av无码av在线a∨天堂不卡| 骑士导航第一精品亚洲| 91久久精品在这里色伊人6882| 国产毛片a片本日a片| 中文字幕无码一区在线观看| 精品2019亚洲欧美日本| 国产女主播野外在线观看| 一级毛片免费视频成人欢看 | 一级 黄 色 片免费亚洲| 99免费在线视频| 精品国产免费一区二区三区91| 婷婷激情就去吻亚洲综合| 欧美三级韩国三级日本一级| 亚洲一级aⅴ片观看| 全部免费毛片免费播放| 宅男精品一区二区视频| 四虎在线免费播放| 国产欧美日韩精品第一页| 了解最新亚洲一区中文字幕| 永久免费的啪啪网站免费观看| 免费国产不卡午夜福在线观看| 欧美成a高清在线观看www| 国产在线观看福利大片| 无码专区文字幕无码野外| 国产精品成人va在线观看网| 精品亚洲成?人片在线观看少妇| 国产免费播放一区二区三区| 亚洲性AV高清激情中文字幕在线 | 一级做人爰全程视频在线看| 国产亚洲精品自在久久77婷婷| 亚洲精品高清视频| 99热在线观看麻豆| 欧美日韩国产一级一顶级| 欧美18精品久久久无码午夜福利| 亚洲gv天堂gv无码男同| 国产午夜精品久久理论片| (愛妃視頻)国产精品亚洲ΑV天堂无码| 国产精品色欲av一区二区| 国产真品黄色毛片| 精品国产有码无码专区| JAPAN白嫩丰满人妻VIDEOSHD| 国产一区二区三区福利姬在线观看| 好xoo在线视频永久免费| 亚洲欧美中文字幕在| 法国A级情欲片性船| 一边摸一边做爽的视频17国产| 综合天天久久一区三区乱码| 午夜无码片在线观看影视| 国产真实乱免费视频在线| 午夜福利国产极品福利| 精品久久久久久中文字幕o| 刺激第一页720lu久久| 美国青青视频免费看| 惠民福利亚洲欧美另类国产中文| 亚洲国产天堂91久久| 秋霞电影院午夜伦高清| 波多野结衣在线视频免费观看| 蜜芽忘忧草三区老狼大豆| vva51精产一二三区| 国产高清情侣视频网| 成人影视一区二区日韩| 国产精品日产无码aⅤ永久不卡| 国产情侣自拍AV| 在线观看中文国产自产伦网址| 闲人吧综合免费888精品| 欧美 亚洲 国 综合aⅴ| 美女裸体无遮挡免费视频| A级毛片高清免费色网在线播放| 精品国产成人麻豆| 97在线午夜免费视影院| 亚洲日韩人妻精品少妇av| 成人在线观看视频免费| 免费大片在线观看www| 品质自拍欧美人妻| 日本亞洲一區二區三區| 欧美高清免费刺激视频网站| 欧洲a级午夜精品| 午夜福利免视频100集2024| 日韩视频不卡免费| 综合欧美三级久久| 国产无套内谢国语对白| 欧美国产亚洲18| 日本午夜免费福利视频| 无码制服人妻丝袜ol在线| 99久久精品国产第一页| 日韩欧美亚洲国产高清专区| 亚洲精品视频第一页| 亚洲狠狠久久综合一区二区三区| 国产综合亚洲日韩| 国产精品白丝AV网站| 国产精品免费AⅤ片在线观看男女 毛片在线免费观看视频勾引 | 国产黄色片在线免费看| 日本人妻中文字幕有码在线视频观看视频| 亚洲综合日韩欧美一区二区| 91免费高清欧美大片在线观看| 国内久久精品影院| 大家可以在这里91香蕉视频在线下载 | 久久成人黄片视频| 亚洲小说图片电影| 萌白酱一线天馒头国产一区| 国产一级国产一级自拍| 欧洲亚洲美洲VA国产综合| 大胸国产精品视频| 播放中文字幕红色熟女| 日韩精品另类图区中文| 国产真实乱免费视频在线| 日韩av不卡在线中文字幕| 日本在线不卡一区二区三区| 97人人超碰人人| 真人一级一级真人片免费观看| 亚洲A∨成人一区影片在线观看| 日韩中文字幕10页视频| 国产 精品 短视频 一区| 久久综合九色综合88网站| 曰韩无码?v一区二区免费| 国产主播AV福利精品一区| 成人3D无遮H动漫| 无码专区文字幕无码野外| 先锋成人免费电影| 国产高清免费| 亚洲欧美色图国产成人精品在线| 在线视频久久只有精品第一日韩| 99久久国产一区二区| 国产日韩精品福利视频综合一区二三四| 韩国激情一区二区三区四区| 机机对机机60分钟无遮挡免费下载| 性爱催眠野战激情操奶日韩| 五月开心久久| 亚洲自拍偷拍一区二区| 亚洲Aⅴ无码精品色午夜蜜芽 | 精品乱伦区一区二区三区| 西西大胆人胆全棵艺术照| 国产精品18禁久久久久久| 四川a片毛片丰满少妇| 亚洲韩国国产高清无码视频| 亚洲人成色77777在线观看大战| 18禁全彩肉肉无遮挡彩色| 尤物禁番动漫视频在线观看| 国产亚洲精品啪啪啪啪| 国产精品永久在线播放| 日本精品91久久久| 午夜中国女人性在线| 欧美日韩免费做爰大片人| 亚州无码视频黄色| 在线国产第一页1024| 欧美精品国外破除大片扒开特写| 怡红院亚洲综合久久九九九| 亚洲全网成人资源在线观看| 日韩成人欧美在线| 美女扒开屁股让男人捅| 国产剧情演绎 在线视频| 日韩国一区二区三区久久| 色综合一区二区三区体内射精| 成人免费综合婷婷在线| YY6080午夜福利无码理论| 国产女主播在线观看一区 | 视色在线观看网站| 美女18禁一区二区三区视频| 小草在线观看免费视频播放| 人妖在线一区二区三区国产| 久久国产99久久国产久麻豆| 9l视频自拍九色9l视频打屁股| 国产欧美日韩精品第一页| 97一本大道波多野吉衣| 国产+日产+欧美视频| 天久久亚洲黄色| 中文天堂最新中文字幕版| 91香蕉视频下载观看| 亚洲香蕉网在线| 伊人久久精品无码二区69| 最新欧美精品一区二区视频| 国产视频黄色免费| 亚洲AV成人一二三区在线观看| 日本国产欧美亚洲精品一区二区| 天堂AV无码大芭蕉伊人AV不卡| 免费看国产成人无码A片| 亚洲AV无码国产精品久久一不卡| 亚洲第一情网站久久网| SE网站在线观看免费视频| 思思99re热这里只有精品6| 一级毛片免费视频成人欢看 | 久久综合久久伊人精品视频| 美女洗澡私拍一区二区三区| 网友精品自拍99区| 寡妇高潮一级毛片免费看老牛影视 | 亚洲视频桃色在线| 办公室爆乳在线 | 日韩欧美国产一区啊| 最近中文字幕大全| 男人猛躁进女人的毛片A片| 国产精品色哟哟网站高清| 忘忧草视频网站| lutube成人福利在线观看| 在线亚洲欧洲福利视频| 日本亞洲一區二區三區| 最新手机看片视频一区| 亚洲精品毛片av一区二区| 9视频国产1在线观看免费| 国产午夜中文字幕在线观看 | 日韩少妇人妻喷潮湿无码视频| 小草在线观看免费视频播放 | 国产亚洲欧美不卡视频| 久久五月天激情五月天| 四虎永久成人免费精品| 日本AAAA视频中文版| 男黄91乱伦网站| 久久精品国产亚洲AV电影网 | 久久久精品三级免| 无码中文zx在线| 美女扒开屁股让男人捅| 国产av一区二区久久久综合| 日韩美女欧美精品| 欧美一区二区三区久久妇| 中国美女被黑人玩出白浆| 婷婷激情五月马上播出| 色欲色香天天天综合无码花季| 国内精品自线在拍精品| 熟妇中文字幕在线观看| 一级黄日本C爱视频| 色综合一区二区三区体内射精| 日产乱码一区二区三区在线| 国产成人综合AV网址| 久久久久精品av123| 日韩无砖无视频| 国产一本高清在线欧美亚洲| 欧美日韩操逼大片| 国产黄色精品一区| 惠民福利亚洲欧美另类国产中文| 成人av一区二区三区区| 又黄又爽又刺激的视频| 欧美无日韩专区在线观看| 国产美女在线精品观看福利| 国产一级二级三级无码影院| 精品国产有码无码专区| 看久久久久久一級毛片| 国产亚洲国产精品欧美| 91性爱在线视频| 国产亚洲欧美在观看| 青青公开啪啪视频| 男女一级毛片在线| av黄色大片网站| 台湾思思亚洲狼人精品一区 | 无码在线观看的网站| 成人三级网站国产| 东北乱国产对白刺激视频| 色哟哟国产精品免费观看网站| 免费 国产 无码久久久| 日本AAAA视频中文版| 国产成人AV无码精品色欲| 一级毛片视频在线看| 首页 图区 国产 亚洲 欧美| 一个人免费播放在线视频看片| 亚洲欧美自拍偷拍一区二区三区四区五区 | 国产一级片视频在线| 亚洲狠狠久久综合一区二区三区 | 国产欧美日韩亚洲精品区gif动图 一级午夜理论片日本中文在线 | 樱桃视频免费观看| 婬荡的护士吴梦梦AV剧情| 蜜桃成人无码18网站在线观看 | 国产无遮挡又黄又爽又色又刺激| 91蜜桃在线观看| 国产乱人伦av在线麻豆a| 网友自拍成人精品视频| 天天做天天爱天天爽天天综合网| 亚洲一区二区精品视屏在线观看| 惠民福利国产精品国产三级国产普通话| 先锋影音AV资源在线高清| 香蕉视频在线看污污| 青青草av国产精品| 欧美精品国外破除大片扒开特写 | 国产欧美综合在线系列| 欧美熟妇的荡欲在线观看| 91探花足浴店少妇在线| 五月丁香激情综合亚洲麻豆精品 | 精品视频偷拍一区二区三区| 亚洲成在线观看| 麻豆亚洲AV成人无码久久精品精品国产一区二区三区AV 性色 | 日韩欧美亚洲每的更新在线| 日本一区二区三区四区无限| 又黄又爽又无遮挡国产| 亚州精品自在在线观看| 国产精品一区二区 在线观看| 怡红院亚洲综合久久九九九| 亚洲高清自有吗中文字| 国产无码精品三区| 久久免费区一区二区三波多野百合影视观看 | 日韩一级黄片成人av| 999在线免费视频| www欧美日韩成人| 久久精品亚洲国产精品亚洲蜜月| 特级婬片内谢aaa毛片| 日韩无码视频高潮喷吹| 国产不卡成人手机在线| 国产日韩精品一区二区三区在线观 | 锵锵锵锵锵免费完整观看动漫| 欧美人妻无码A级视频| 在线视频播放免费视频| 激情毛片永久免费视频| 老板把舌头伸进我下边视频| 伊人精品在线免费视频 | 爱情岛1号线和2号线测速| 久久精品性无码一区二区爱爱| 91视频污免费下载| 国产剧情演绎 在线视频| 欧美性猛交黑人粗大| 国产永久免费福利片| 4399在线观看免费高清电视剧| 天天躁日日躁狠狠躁A∨| 少妇中文综合欧美| 国产精品完整版免费| 久久精品成人免费观看97| 手机在线不卡看av毛片| 一级片麻豆狼人插在线| 老司机永久网站免费视频真人| 国产91在线高清高冷女同事| 加勒比东京热无码一区| 久久中文字幕免费高清| 欧美成人影院在线播放日本处ⅩⅩ人╳护士19 | 不充钱看污污视频| 欧美激情一区二区三级在线| 娇小小小泬xxxx女人| vva51精产一二三区 | 韩日网站在线观看免费| 亚洲一区二区精品视屏在线观看| 久久性精品视频99| 丝袜中文欧美日韩日韩精品| 亚洲精品成?人在线观看| 亚洲性爱先锋影音| WWW草莓视频在线观看| 亚洲无码一区盗摄土豆| 国产精品高清一区二区不卡片 | 饥渴人妻精油按摩无码专区| 国产男女激情无遮掩免费看| 亚洲精品福利天堂| 18午夜AV女同片在线观看| 亚洲AV无码一区二区三区牛牛| 国产剧情无码电影院| 色一情一区二区三区四区国内精品久久久人妻中文字幕 | 欧美伊人久久大综合精品| 首页 图区 国产 亚洲 欧美| 久久99热精品免费观看动漫| 欧美日韩国产第九在线| 深夜视频在线| 噜噜噜噜噜久久久久久91| 一级午夜理论片日本中文在线| 色综合色综合久久综合频道88| 欧美h久免费女| 免费国产经典超清在线| 在线国产精品自拍iln| 欧洲无码免费视频一区二区| 啪啪网视频免费观看| 久久久一夲精品99久久精品66 | 亚洲精品一区二区3| 欧美一级特黄啪啪片免费看| 免费AV一区二区三区无码| 积积对积积的桶的视频免费网站| 对白射精在线播放| 亚洲av成人无码无在线观看| 亚洲精品91一区二区三区| 亚洲av无码日韩av无码| 欧美疯狂做受XXX高潮| 2020中文字幕无码专区| 国产香蕉网在线播放| 午夜福利视频福利电影| 国产黄片三级在线播放| 成人4399看片hd免费| 成人黄色大片在线播放| 边摸边吃奶边做视频免费69| 三级国产人成在线亚洲视频观看h| 伊人一区二区三区欧美| 国产欧美日韩综合精品三区| 大乳欲一区二区三区| 欧美高清国产在线观看| 亚洲高清自有吗中文字| 亚洲Aⅴ无码专区在线观看下载| 亚洲av 一卡二卡| 精品丰满熟女一区三区| 中文字幕播放视频不卡| 色欲天天婬香婬色综合网| 在线成人爽a毛片免费软件| 欧美日韩v在线观看不卡 | 欧美综合精品32p| 日本亚洲免费播放| 欧美亚洲综合免费| 刺激第一页720lu久久| 97国产永久网址在线观看| 白洁在宾馆被赵振连玩三天| 成 人免费 在线手机版视不卡| 老师你下面太紧了拔不出来| 亚洲人成色77777在线观看大战| 網友分享国产99久久久国产精品下药心得 | 法国A级情欲片性船| 天天日天天日天天爽天天射| 无码88aⅴ欧美熟妇人妻影院| 日本色免费在线观看| 一区二区在线观看毛片| 日日碰狠狠添天天爽爽爽| 久久免费看少妇A级特黄| 精品国产自在97香蕉| 99精品热视频只有精品10| 永久精品视频免费wwwapp | 色日韩在线视频全集| 亚洲日韩欧美小视频精品区| 亚洲熟妇男女啪啪视频| 欧美日韩三级在线播放| 综合色区偷拍| 积积对积积的桶免费观看不下载| 乱伦日本亚洲中文| 亚洲国产精品一在线观看av| 久久精品久久久久久久精品| 欧洲精品综合亚洲| 精品久久久久久人妻中文字幕| 国产视频三级免费精品| heyzo北条麻妃在线播放| 欧美激情性XXXXX高清| 91久久成人18免费网站| 自拍2区国产精品| chinasex喷白浆videos自慰 | 中出内射国产欧美日韩99久久| 日韩av不卡在线中文字幕 | 日韩人妻AV一区夜夜| 欧美一级免费网址| 日韩欧美亚洲每的更新在线| 99久久婷婷国产一区二区| 办公室爆乳在线 | 久久精品成视频播放| 国产99久久久国产精品免费高清 | 国产乱子伦一区二区三区黑人| 久久綜合本色宗合一本色| 87影院在线观看视频在线观看| 亚洲欧洲动漫av| 国产精品成人69xxx| 国产情侣露脸自拍| 视频二区在线观看| 亚洲狠狠久久综合一区二区三区 | 黄色日本韩国国产| 丁香蜜桃综合cb| 在线看免费福利影院| 色噜噜亚洲一区二区| 麻豆视频网址| 深夜福利小视频在线观看| 不卡无码av一区二区| 亚洲资源一区二区在线观看| 91页国产在线自啪| 欧美熟妇的荡欲在线观看| 99热门精品一区二区| 自拍区亚洲私拍首页| 蜜桃视频在线观看网站| 亚洲裸体黄色成人网站| 99re6热在线视频精品| 老女人裸体交性大片| 视频一区欧美亚洲| 一区二区三区无码日韩国产粉嫩tv | 国产天堂AV在线色| 亚洲午夜精品一区二| 国产91在线九色| 国产一区二区三区成人久久片老牛| 男女午夜特黄毛片免费| 一区二区福利| 亚洲成在人线在线播放无| 国产AV剧情琪琪| 日本高色高清视频免费| 成人黄色大片在线播放| 99免费在线视频| 国产影视无码久久| 亚洲成av人片在线播放亚洲AV无码成人精品区 | 亚洲国产视频a在线观看| 91久久青青草原免费| 91探花足浴店少妇在线| 欧美亚洲精品小说在线阅读| 色老头在线视频免费观看| 精品久久久久久人妻中文字幕| 韩国色情巜肉欲教室2| 久久精品国产丝袜拍国语| 久久天天躁综合夜夜黑人鲁色 | 日韩无码性爱电影| 自拍欧美影视亚洲| 久久伊人久久大香线蕉一区| 婷婷五月天丁香五月视频在线| 男同桌玩我奶头我j扒我内衣内裤 欧美在线日韩精品国产另类 | 国产无码乱伦一区| 超碰97成人色导航| 国产精品系列在线观看| 久久国产精品推油| HEYZO在线视频一区二区| 免费无码AV片在线观看软件| 日韩毛片精品在线观看| 日本二区不卡视频中文字幕| 又黄又爽又刺激的视频| 亚洲天堂有码在线视频| 日韩黄色在线看亚洲精品毛片视频 | 巜办公室里的交换3| 无广告观看久久精品99久久香蕉国产全集| 女人爽得直叫免费视频| 欧美黑人XXXX一区二区三区| 国产一级片视频在线| 久久久精品少妇3p| 亚洲国产成人精品女人久久久真人一级毛片91| 午夜无遮挡男女怕怕怕视频| 日韩午夜资源在线| eeuss秋霞成人影院| 韩国精品一区二区成人| 无码图片在线观看| 国产亚洲色图视频在线观看| 懂色av成人毛片网站| 国产女主播在线观看一区| 狼人色国产在线视频麻豆| 日本内射免费观看视频| 老熟妇仑视频一区二区三区四区| 久久伊人久久大香线蕉一区| 免费A级毛片在线看| 国产成a人片在线观看视频99| 国产香蕉网在线播放| 天堂va欧美va亚洲va国产| 美女洗澡私拍一区二区三区| 日韩美女av一区二区| 国产免费看18禁止观看网站色欲| 亚洲国产天堂91久久| aa亚洲视频在线观看aaa| 在线观看日韩一区二区视频| 亚洲影院免费观看| 亚洲第一精品卡通动漫在线观看| 欧美国产在线播放欧美| 歐美亞洲綜合在線激情2020| 国产欧美黄片亚洲大尺度视频| 永久免费A片在线观看全网站| 国产无遮挡网站免费| 激情欧美成人小说在线收听| 国产亚洲精品久久一区二区三区| 999视频精品免费播放| 亚洲韩国国产高清无码视频| 小草久久人热国产| 98在线精品在线视频| 日韩三区二区北岛玲| 国产精品毛片一区久久久| 黄色高清无码在线| 国产亚洲欧美视频久久| 暖暖视频免费最新中文字幕| 久久精品女人天堂| 琪琪777午夜理论片在线观看播| 欧美高清在线视频一区二区| 中文字幕三级久久久久久| 国产免费中文字幕?v在线| 免费观看毛片视频网站| 颤抖痉挛喷潮极度大喷潮| 情侣成人在线视频| 国产精品18久久久久激情| 欧美视频在线视频免费va| 91香蕉视频下载观看| 亚洲AV小说最新在线网址| 免费看顶级直播片| 亚洲?v日韩?v高潮无码专区| 日韩中文字幕有码无码视频| BLACKED欧美金发大战黑人VIDEO| 久久久久亚洲āv无码专区网站| 337p日本欧洲亚洲大胆在线| 永久免费的啪啪网站免费观看| 99久热国产在线观看青草青| 欧美色八区在线视频| 中日韩欧美风情视频| 久久久一夲精品99久久精品66| 中文字慕在线不卡| 亚洲综合福利| 老师的大兔子好软水真的好多软件 | 自拍h视频一区二区| 女人色国产a精品| 日本a视频在线观看| 国色天香社区手机视频| 在线看污网站| 5av国产精品爽爽ⅴa在线观看| 男人搡女人搡到高潮视频| 吸奶头吸到高潮视频免费视频| 日本精品一区二区三区在线视频。| 国产精品丝袜无码免费久久久| 爆乳精品久久一区二区| 欧美精品国外破除大片扒开特写 | 婷婷91久久精品一区| 国产视频适合在网上看的和出水了| 玖玖视频精品| 国产互换人妻好紧HD无码| 一区二区三区无码日韩国产粉嫩tv | 激情国产91天天干| 在線不卡一區二區三區日韓| 日本在线一级aaa片| av网站不卡免费观看国产| 国产女主播在线观看一区| 欧美成人午夜性视频性色| 亞洲AV無碼成人專區片在線觀看| 三级片网址在线观看| 国产精品高清一区二区不卡片 | 中文字幕最新| 日本一卡二卡手机2021| 亚洲午夜在线网址网址| 亚洲中文字幕无码精品| 欧洲精品免费av一区二区| 久久精品女人天堂| 思思99在线视频| 精品久久久久久人妻中文字幕| 久99国产免费动漫| 日韩免费精品视频一区二区三区| 中本亚洲欧美国产日韩| 国产亚洲美日韩AV中文字幕| GOGO大胆全球裸XXXX| 韩日网站在线观看免费| 欧美黑人一区二区三区看片| 天天躁日日躁狠狠躁欧美老妇app| 欧美性a在线香蕉| 精品日本三级综合| 欧美性猛交黑人午夜视频| 扒开腿挺进湿润的花蕊| av番号+影音先锋| 欧美在线暴力性xxxx| 亚洲毛片无码乱妇p50| 97无码精品二区在线视频| 亚洲中文字幕永久在线全国| 成人激情中文字幕一区二区 | 日日本宅男色女视频色色网| 2020人妻视频免费观看| 欧洲a级午夜精品| 九九九免费精品视频久久中文字幕| 国产一级片视频在线| 久青草18在线观看视频 | 影音先锋在线免费资源| 国产日韩未满十八禁止在线观看| 黄色片毛片免费| 歐美一區二區三區激情啪啪| 精品导航综合| 免费一级无码婬片在线| 国产剧情演绎 在线视频| 精品国内自产午夜拍在线观看视频| 亚洲午夜嘿嘿视频| 99久久精品国产第一页| 理论片高清免费理论片毛毛片| 亚洲精品高清视频| A毛片免费全部在线看| 免费的无码人妻视频| 亚洲精品视频第一页| 99乐精品视频精品视频| 久久九九性爱视频| 国产精品丝袜无码免费久久久| yellow视频免费观看| 日韩午夜资源在线| 丰满人妻a级毛片无码中文字幕| 永久免费在线观看视频| 无广告观看久久精品99久久香蕉国产全集| 亚洲av 一卡二卡| 中日韩欧美风情视频| 波多野结衣1区| 亚洲天堂有码在线视频| 久久精品道一区二区三区}| 国产精选莉莉私人影院| 亚洲卡通另类欧美| 99久久国产一区二区| 一级性爱免费视频| 色婷婷樱桃Av一区二区| 最新国产成人av网站网| 国产电影久久精品| 国产欧美日本韩国另类| yellow视频免费观看| 欧美h久免费女| 九九精品视频一区二区三区 | 国产女人乱人精品三区| 深夜福利小视频在线观看| 欧美老人巨大xxxx做受视频| 亚洲 成人 综合 中文 伊人| 国产一区二区三区在线观看精品| 日本不卡少妇被躁亲亲蹭 | 久热首页国产在线| 国产亚洲精品影视| 亚洲日韩a综合一区欧美激情| 欧产日产国产不卡一二三区亚洲日韩在线中文字幕综 | 九九手机在线免费视频| 九九九热视频| 久久伊人久久大香线蕉一区| 情侣成人在线视频| 北京亚洲精品午夜va久久成人 | 日韩精品一区二区三区入口| 精品无码一区二区三区Av深田| 九九手机在线免费视频| 免费 国产 无码久久久| 成人福利午夜A片公司| 亚洲少妇精品自拍av| 99在线视频观看| 免费看黄视频网址| 国产成人a亚洲精品| 婷婷五月丁香加勒比在线| 台湾A片视频在线观看6666| 2020中文字幕无码专区| 嫩小槡BBBB槡BBBB槡免费| 亚洲av无码国产精品色午夜| 国产精品人成在线观看1一| 尤物禁番动漫视频在线观看 | 欧美成人免费VA影院高清| 国产女主播在线观看一区| 粉嫩国产白浆在线播放| 日韩一区二区免费精品视频| 久久性精品视频99| 惠民福利国产成人一区二区三区视频免 | 久青草18在线观看视频 | 手机在线观看网站免费视频| 欧美成a高清在线观看www| 日韩黄色性爱一级视频| 久久久一夲精品99久久精品66| 日本不卡视频一区二区| 午夜久久久久久噜噜噜| 在线国产精品自拍iln| 国产尤物电影在线观看网站免费| 和上司在办公室疯狂的做| 午夜成人黄页网站| 久艾草国产成人综合在线视频| 夜夜夜夜夜猛噜噜噜噜噜| 日韩?V无码一区二区三区不卡 | 精品乱伦区一区二区三区 | 欧美成人免费VA影院高清| 免费AV一区二区三区无码| 亚洲国产在一区二区三区| 久久99热精品免费观看动漫| 精品无码AV吞精AⅤ久久| 国产精品无码XXXXX| 福利黄色国产视频网站在线观看 | 九九手机在线免费视频| 国产又粗又爽又大又长免费视| 精品无码欧美一区二区三区不卡| 一夲道av无码免费中文字幕| 99久热国产在线观看青草青| 伊人直播网站| 国产 黄色三级电影高清免费观| 精品中文高清完整版在线hd| 日本无码h肉3d动漫动态图| 日本乱理论片免费看| www女被 喷水噜噜噜| 日本不卡视频一区二区 | 污污的视频在线免费观看| 亚洲精品国产一夜情在线观看| 欧美另类交视频| 色欲天天婬香婬色综合网| 日韩精品一区二区三区入口| 一本无码aⅴ久久久国产| 亚洲Aⅴ无码专区在线观看下载| 婷婷六月综合网| 欧美巨大黑人精品videos| 中文字幕无码专区制服丝袜 | 最近中文字幕大全| 欧美亚洲国产专区护士在线| 看午夜大片特色视频国产| 免费无遮羞大尺寸的动漫片| 国产日批视频免费在线播放| 樱桃视频免费观看官网| 中文字幕乱码一区av久久| 91香蕉视频下载观看| 国产精品99婷婷资源综合| 亚洲无码一区盗摄土豆| 亚洲A∨日韩精品久久久久久A| 国产传媒一区二区| 青青公开啪啪视频| 亚洲美腿丝袜无码专区| 丝袜制服欧洲亚洲中文| 老板把舌头伸进我下边视频 | 无卡无码一区二区三区| 成人全免费高清观看| 中文字幕免费观看一区三区 | 亚洲伊人天堂一区二区| 欧美成αⅴ人在线观看| 婷婷欧美精品一区二区| 9久热这里只有国产中文精品国产| 日韩免费一区二区三区在线播放| 欧美激情办公室黑人aⅴ| 丁香天婷五月天综合网| a级毛片无码免费真人久久国| 国产乱码精品一区二区三区字幕| 野花高清完整版免费观看视频大全| 国产精品无码刺激性| 在线播放国产猎奇合集| 在线观看亚洲精品国| 偷拍亚洲综合20P| 青青公开啪啪视频| 欧美中文字幕日韩综合| 亚洲一区美女视频| 精品乱伦区一区二区三区| 国产精品综合日韩在线| 日本一区二区三区四区无限| 欧洲激情在线观看| 亚洲TⅤ极品无码| 亚洲无线码一区二区| 精品视频在线观看免费网站| 人人天人人妻人人澡| 秋霞电影院午夜伦高清| 欧美高清在线视频一区二区| 亚洲图片欧美一区二区日韩| 综合激情欧美亚洲另外类自拍| 欧美三级网络在线观看| 被群cao的合不拢腿h小说| 欧美黄片一区二区| 免费aⅤ一区二区三区| 成人激情午夜福利| 综合激情丁香久久狠狠男同| 亚洲乱码尤物193yw在线播放| 国产美女一级特黄大片大全| 亚洲欧美另类久久久精品播放的| 免费在线观看特级毛片| ckplayer国产亚洲欧美| 亚洲男人无码天堂玛雅| 秋霞无码国产在线| 亚洲精品无码aⅴ中文字幕蜜桃 | 国产无遮挡又黄又爽又舒服| 无码不卡在线观看播放| 亚州精品无码久久久久av| 亚洲av一级毛片特黄大片| 国产又色又爽又刺激在线播放| 国产又色又爽又刺激在线播放| 新国产美女精品一区二区| 国产乱子伦精品免费视频| 人人摸人人操Α√| 国产午夜亚洲精| 色多多在线日韩精品一区| 国产中文字幕综合色| 丁香花在线电影小说| 久在线免费看成年人视频| 扒开腿挺进湿润的花蕊| 极品美女扒开粉嫩小泬| 亚洲AV永久无码精品爱妃影视 | 亚洲一区二区在线aⅤ| 国产欧美日韩综合精品三区| 国产欧美日韩va另类影音先锋| a片强制妇女高潮成人片在线观看| 国模大尺度炮交视频免费看 | 精品欧美久久三级| 国产精品视频视频久久| 日韩福利午夜无码免费| 精品乱伦区一区二区三区| 中文天堂WWW网在线最新版| 麻豆精品久久久久久久99蜜桃| 精品日本三级综合| 久久精品a无码中文字字幕| 看全色黄大色黄大片爽一下| 丰满人妻系列无码专区系列| 久久精品国产亚洲αV麻豆网站 | 久久久国产精品免费蜜臀| 国产淫语对白| 无码88aⅴ欧美熟妇人妻影院| 学渣含着学霸几巴的写作业视频| 快速了解久久亚洲中文字幕| 日本精品自拍日韩| 一级做人爰全程视频在线看| 91精品福利视频| 亚洲A∨日韩精品久久久久久A| 看国产一级特黄大片在线一| 欧美在线一二区| 免费高清在线国产视频| 欧美久久久久久久一区二区三区 | 欧美日韩电影国产一区二区| 午夜一级真人免费毛片在线视频| 日韩欧美中文字幕精品不卡| 亚洲熟女av综合网| 久久精品久久久久久久精品| 美女胸又大又黄又www的网站| 亚洲成av人片在线播放无码| 精品国产第一页在线观看| 久久精品視頻免費觀看| 久久妇女人妻精品四区| 变态另类av一区二区三区| 在线观看亚洲精品国| 亚洲av日韩av高潮喷无码| 国产综合色在线视频播放线视| 两个人无码免费操逼视频| 狼天天狼天天香蕉综合网互動交流 | 亚洲精品国产日韩成| 欧美日韩国产高清视频二区| 亚洲精品国产一夜情在线观看| ssss在线观看国产| 黑人干少妇视频| 日韩欧美中文字幕精品不卡| 国产成人精品在线观看免费 | 国产精品成人免费视频| 亚洲日韩精品一二三四区| 久久综合色老色| 在线欧美看A一区二区| 在线观看中文国产自产伦网址| 一级黄色在线播放| 日韩无码激情| 亚洲精品成人久久?v中文字幕| 日韩精品一区二区?v在线| 娇妻在厨房被朋友玩得呻吟| 视频一区二区三区四区国产69| 男人天堂网2020| 亚洲男人无码天堂玛雅| 老师你的兔子好软水好多视频| ?v天堂影音先锋| 就热福利在线| 狠狠色丁香久久综合频道日韩| 在线观看你懂的网址视频| 中文亚洲日韩欧美中字| 久久av毛片电影| 欧美一区二区三区性视频| 国产成人免费精品| 中日韩中文字幕无码一本| 日本亚洲免费播放| 2024国产高清日本一道| 免费在线观看日韩毛片| 欧美激情在线精品| 精品亚洲综合射精| 法国A级情欲片性船| 国产日韩欧美一区二区三区综合| 丝袜中文欧美日韩日韩精品| 日本午夜免费福利视频| 欧美日韩在线一区在线| 精品国产一区二区三区AV小说| 久久精品人人妻人人澡人人爽 | 国产在线91真实露脸| 四虎国产精品免费久久影院| 欧美无日韩专区在线观看| 欧美亚韩一区二区三区| 日本高色高清视频免费| 亚洲欧美综合国产精品二区| 婷婷欧美精品一区二区| 狠狠干五月天亚洲欧美黄色| 在线视频精品人妻| 精品国产第一页在线观看| 免费费一级女女特黄大真人片| 欧美日韩亚洲精品中文字幕在线观看| 久久亚洲欧洲精品色噜噜| 福利导航第一福利导航| 日韩中文字幕一二三| 日本一卡二卡手机2021| 成人国产精品免费视频国| 美女洗澡私拍一区二区三区| 国产盗摄一区| 国产精品一级黄色毛片| 亚洲人妻无码免费一区| 69国产精品自拍| 欧美一级高清A片费观看| 91内射丁香色综合| 天堂系列97小嫩模在线观看| 中文字幕人妻丝袜视频| 国产香蕉成人综合精品视频| 污污午夜福利夜夜爱网站| 亚洲欧美日韩图片| 国内精品自线在拍精品| 國產午夜亞洲精品一區二區| 亚洲国产成人爱AV在线播放下载| 91蜜桃在线观看| 九九久久免费视频| 2020中文字幕无码专区| 99国产成人精品无码青春| 色翁荡熄又大又硬又粗又视频| 一级毛片福利午夜电影| 日韩亚洲精品视频| 女人爽得直叫免费视频 | 91久久成人18免费网站| 精品有码中文字幕| 岛国在线看片| 蜜桃Av噜噜一区二区三区大高潮| aⅴ亚洲日韩色网站| 国产精品视频免费看人鲁| 国产成人精品在线观看免费 | 国产剧情无码电影院| 亚洲AV成人一二三区在线观看| 精品国产sm在线大全| 5av国产精品爽爽ⅴa在线观看| 天堂系列97小嫩模在线观看| 亚洲欧美在线观看国产| 国产免费无套视频在线观看| 久久亚洲AV无码国产精品色| 超碰在线公开免费| 天天日天天日天天爽天天射| 久久伊人精品毛片| 久久久综合人妻少妇| 积积对积积的桶的视频免费网站| 日韩一级黄片成人av| 国产欧美日韩精品九九久久| 人插女人免费视频久久| 国产成人综合亚洲欧美动漫| 成年人在线免费观看视频播放| 国产成人欧美一本区| 男女的爽爽爽在线视频国产| 欧美日产综合中文字幕| 中文字幕人妻丝袜视频| 国产精品视频免费看人鲁| 99re66热这里只有精品4| 吸奶头吸到高潮视频免费视频| 欧美13一14周岁a种子| 日本公妇色中文字幕| 久久天天躁综合夜夜黑人鲁色| 久久久久精品av123| 131美女视频爱做国产| 国产女主播在线观看一区 | 97无码精品二区在线视频 | 一区二区三区无码日韩国产粉嫩tv| 成人久久三人毛片最新| 男女日批视频| 国产成人精品久久一区三级| 九九热精品在线观看视频| 精品国产自在97香蕉| 亚洲精中文字幕无码专区一| 日韩?在线欧美?国产| 快插我bb好爽舔我视频| 娇妻被朋友玩得呻吟在线电影| 亚洲啪AV永久无码精品毛片| 国产欧美黄片亚洲大尺度视频| 一级片久久久久久| 99久久精品国产一区二区三区会员| A片免费在线视频| 欧美日韩国产精品久久一区| 怡红院亚洲综合久久九九九| 九九九热视频| 精品三级无码国产在线观看| 中文天堂WWW网在线最新版| 国产精品色青久久久久| 久久精品视频黄色| 黄色亚洲一区二区三区| 中文字幕在线观看2020| 她的两片蚌肉慢慢张开| 国产精品综合日韩在线| 国产精品成人久久| 国产美女一级特黄大片大全| 午夜不卡av免费| 亚洲日韩一中文字暮| 中文字字幕在线中文乱码不卡新二 | 五月婷婷六月丁香综合| 亚洲精品一线观看| 假戏真做红肿侵犯h| 国产中文在线观看精品| 巜办公室里的交换3| 亚洲日本欧洲二区精品| 色播在线永久免费视频网站| 女人爽到喷水的视频免费看| 日日人人狠狠影院| 黄片视频免费国产| av无码av在线a∨天堂不卡| 男女一级毛片在线| 国产精品一级黄色在线播放| 三级国产人成在线亚洲视频观看h| 久久精品性无码一区二区爱爱| 131美女视频爱做国产| 欧美日产国产亚洲综合| 中文一区二区三区字幕| 无码精品?∨在线观看免费| 国产精品长腿丝袜第一页| 亚洲无码av在线高清| 人妻被按摩到潮喷中文字幕| 国产乱子伦一区二区三区黑人 | 欧产日产国产不卡一二三区亚洲日韩在线中文字幕综 | 欧美96高清乱妇视频| 四虎国产精品免费久久影院| 最新欧美精品一区二区视频| 无码一级毛片人妻开车黄| 不卡无码av一区二区| 中日韩欧美风情视频| 婷婷深爱亚洲五月| 国产成人欧美一本区| 婷婷五月国产手机在线视频| 美女18禁一区二区三区视频| 欧美日韩不卡一区视频在现| 久久综合精品国产一区二区三区无码 | 熟女变态另类资源网| 国产私拍福利精品视频推出69| 国产精品免费AⅤ片在线观看男女 毛片在线免费观看视频勾引 | 国产激情视频在线观看免费播放| 免费韩少妇无码一区二区影片| 国产综合亚洲日韩| 国产成人午夜视频app| 国产一区一级观看| 国产免费黄色网站在线观看| av黄色在线免费观看| 大屁股av系列在线| 亚洲av电影在线观看一区二区三区| 一本色道久久综合亚洲av蜜桃臀| 国产亚州精品无线视频| 婷婷深爱亚洲五月| 中文字幕二三区不卡| 午夜福利自怕| 人人摸人人操Α√| 精品 无码 免费 国产| 国产黄A片三级三级三级| 粉嫩AV一区二区三区在线| 一级做人爰全程视频在线看| 亚州精品自在在线观看| 骑士导航第一精品亚洲| 中文人妻在线A天堂| 婷婷91久久精品一区| 国产成人免费精品| 99尹人香蕉國產免費天天拍| 五月激情六月丁香| 不充钱看污污视频| 国产亚洲欧美不卡视频| 亚洲色大成网站WWW永久网| WWW草莓视频在线观看| 久久综合给合久久97色| 国产一级a爱大片| 亚洲国产欧美中文永久| 国产自拍欧美日韩在线视频| 亚洲国产成人V?在线观看| 日韩高清一区二区三区直播在线| 午夜福利在线观看福利| 亚洲精品明星十八禁在线观看| 制服丝袜国产中文精品 | 亚洲AV永久无码精品国产片| 无码午夜福利影院国| 白洁在宾馆被赵振连玩三天| 丁香花在线电影小说| 男女肉粗暴进来动态图| 亚洲熟妇男女啪啪视频| 在线日本视频天堂| 日韩无码性爱电影| 国产无套内谢国语对白| 国产情侣自拍AV| 午夜tv免费区国产4无码| 免费黄视频网站在线| 香港三级理论在线播放1| 亚洲精品国产精品国自| 亚洲第一色片曰本毛片| (凹凸視頻)国产精品未满十八禁止观看| 亚洲国产成人精品二区| 福利日木AV无码专区亚洲AV毛片 | 亚洲性爱视频免费看| 精品高清美女精品国产区| 国产在线观看福利大片| 国产mv欧美mv日产mv观看| eeuss秋霞成人影院| 在线观看精品福利片香蕉| 无码永久免费视频在线网站| 一区二区视频在线导航观看| 偷亚洲偷国产欧美高清| 午夜看片欧美日韩在线| 99久久国产一区二区 | 91精品国产91久久久无码伦| 一本久久a久久精品亚洲| 免费在线观看日韩毛片| 亚洲成av人片在线播放无码| 国产无遮挡网站免费| 中文字幕视频一区亚洲欧美| 国产成人免费精品| 日韩1024看片永久免费| 国产免费破外女真实出血视频aⅴ| 欧美一级特黄啪啪片免费看| 国产91模特无码| 久久久国产99久久国| 国产亚洲精久久久久久无码妖精 | 香蕉视频在线看污污| 久久99中文人妻无码专区| 日韩午夜资源在线| 精品视频在线播放福利| 美女裸体毛片国产| 精品一区精品二区| ssss在线观看国产| 中文字幕一区二区5566| 国产高清视频在线观看流白浆| 亚洲男人最新版本天堂| 一级性爱视频欧洲| 国产一区二区三区在线观看精品| 中文无码久久精品囯产| 台湾A片视频在线观看6666| 国产国语精彩对白在线观看| 亚洲中文字幕日产久久精品| 日本特黄a级120秒试看| av无码中文字幕在线天| 中文字幕在线观看2020| 香蕉视频在线看污污| 中日韩中文字幕无码一本| 国产在线视频福利一区二区| 青青五月天久久大一香蕉| BLACKED欧美金发大战黑人VIDEO| 国产传媒一区二区| 欧美性爱午夜福利网站| 乱伦亚洲精品自拍| 国语自产拍在线视视频| 亚洲精品国产一夜情在线观看| 国产一级电影在线观看| 内射国产日韩视频| 欧美性爱搞妞干网婷婷五月天| 狼人色国产在线视频麻豆| 吸奶头吸到高潮视频免费视频| 国产二区日韩AV制服丝袜| 亚洲精品一线观看| 在线观看亚洲精品国| 国产一级做a爰片按摩孕妇| 欧亚无码专区| 国模大尺度炮交视频免费看| 在线精品超清国产| 精品亚洲日韩国产成人av在线| 欧美人妻无码A级视频| 麻豆91精品久久久| 噜噜噜噜噜久久久久久91| 久久无码视频MM131| 在线视频播放免费视频| 国产区在线看| 亚州精品自在在线观看| 国产精品丝袜无码免费久久久| 青青国产在线一级视频| 17c丨国产丨精品入口| 欧美不卡一区| 亚洲成人无码在线网站| 爱妃国产99久久精品播放| 婷婷综合福利网址大全| 国产日韩欧美在线播放视频| 久久国产精品欧美激情a∨在线视频播放| 亚洲免费的中文小说图片| 国产天天强奸三级片| 性爱催眠野战激情操奶日韩| 拍拍拍夜夜免费视频| 亚洲中文国产一区精品| 无码专区文字幕无码野外| 新国产美女精品一区二区| 性黄色一级国产视频| 亚洲欧美日韩视频一区二区三区| 蜜桃麻豆www久久囤产精品| 亚洲高清欧美色图| 亚洲国产精品一在线观看av | 三级黄色毛片在线免费播放| 精品一区二区三区在线视频观看| 国产香蕉网在线播放| 对白射精在线播放| 粉嫩国产白浆在线播放| 欧美又爽又大又黄a片 | 91视频久久久播免费观看| 最新影片日本巨波霸乳影院| 中文字幕在线永久播放| 亚洲熟妇男女啪啪视频| 国产精品不卡无码A∨在线播放| 91青草亚洲视频免费| 成人影院人人免费| www欧美日韩成人| 欧美激情乱人伦| 日韩av不卡在线中文字幕 | 日韩精品超清视频一区| 久久精品东京热最新无码av| 国产乱淫av片免费网站| 麻豆国产91在线播放| 亚洲av无码日韩av无码| 精品欧洲av无码一区二区三区14| 亚洲精品无码一级毛片| 欧美三级韩国三级日本一级| 国产高清特黄无遮挡大片| 日韩中文字幕久久版| 午夜亚洲国产理论片二级港台二级| 日本在线不卡一区二区三区| 国产亚洲精品一级āv三级无码毛片| 亚亚洲一区日韩高清中文字幕亚洲| 免费黄色福利网站网址| 日韩四方Av无码久久Av| 亚洲资源一区二区在线观看| 免费?V片在线观看蜜芽TV| 欧美精品国外破除大片扒开特写| 麻豆国产沈芯语在线91精品| 国产性爱在线观看欧美亚洲黄片| 免费看黄视频网址| 夜夜爽妓女77777免费看| 中文字字幕在线中文乱码不卡新二| 91超碰青草国产福利久久| 三上悠亚网站在线观看一区二区| 欧美亚洲精品小说在线阅读| 99热国产这里只有的精品9| 亚洲911精品一区二区| 国产互换人妻好紧HD无码| 最近中文字幕大全| 午夜影视在线免费区| 免97狼人久久伊人精品| 欧美性猛交黑人午夜视频| 欧美一区性感91九色婷婷| 99er6精品视频在线观看| 一区二区三区免费版在线| 精品久久久久久AAA妇女自卫| 男女肉粗暴进来动态图| 亚洲乱码尤物193yw在线播放| 国产日韩免费观看| 中国一级欧美三级| 日本亞洲一區二區三區| 日本免费一区二区三区超强| 亚洲妓女综合网995久久| 欧美日韩人妻制服丝袜无在线视频| 亚洲国产成人精品二区| 美女胸又大又黄又www的网站| 被东北猛男爆cαo的小男生图片| 激情欧美成人小说在线收听| 久久香蕉网免费| 不卡不卡不卡在线播放| 亚洲国产人自精在线尤物| 亚洲中文字幕永久在线全国| 亚洲AV午夜成人一区二区| 国产午夜精品一品二品在线观看| 在线看免费福利影院| 最新国产一区二区suv精品久久| 久久无码喷水亚洲av专区| 污片在线看大全高清 | 性开放国产精品按摩av| 久久久久毛片精品美女免费 | 成人国产精品免费视频观看| 三级片s色国产视频精品 | 久久妇女人妻精品四区| 欧美一区性感91九色婷婷| 伊伊人成亚洲综合人网7777综合人妻久久一区二区精品 | 中文字幕黄色av首页网站| XXXX视频在线国产| 97人人超碰人人| 麻豆国产沈芯语在线91精品| av无码免费性爱| 亚洲五月激情天堂| 国产日韩欧美一区二区三区综合 | 久久久精品少妇3p| 日韩人妻视频高清在线| 被强硬侵犯人妻HD中文| 国产日韓无码一区二区三区| 锵锵锵锵锵免费完整观看动漫| 综合无码久久国产| 在线人成视频播放午夜福利网站| 2021年中文字幕永久免费| av羞羞漫画在线观看| 国产成人综合亚洲欧美动漫| 欧美精品久久久久自慰| 色多多在线日韩精品一区| 全免一级久久久久片| 国产乱码精品久久久久电影| 国产精品色青久久久久| 麻豆国产沈芯语在线91精品| 日产乱码一区二区三区在线| 丝袜制服欧洲亚洲中文| 国产黄片一级片| 国产av天堂亚洲国产av麻豆| 欧美日韩国产高清视频二区| 国产精品18禁久久久久久| 国产精品美女后入一区二区| 2017最新伦理电影宅宅手机免费在线观看 | 亚洲乱码av乱码国产精品| japanese色国产在线看| 亚洲国产精品日韩新茶| 亚洲国产精品日韩新茶| 三级黄色毛片在线免费播放| 日韩成人网址| 曰韩国产高清无码| 性黄色一级国产视频| 精品国产99久久久久久国产全程露脸 | 久久久国产99久久国 | 色吊丝中文字幕| 国色天香精品一卡2卡3卡| 亚洲无码乱码视频| 亚洲色欲天天天堂色欲网91| 公公舔我好舒服哦噢喔免费播放| 香蕉视频在线看污污| 亚洲Ⅴa中文字幕欧美不卡| 日本二区不卡视频中文字幕| 老熟妇仑视频一区二区三区四区| 一级黄日本C爱视频| 一区二区三区久久老熟女| 红杏国产成人精品视频| 800在线观看国产一区| 日本欧洲亚洲精品大胆| 青青青热久免费精品视频| 92午夜福利少妇视频| 亚洲欧洲国产1区二区| 国产乱色国产精品免费| 青青国产成人综合在线| 1769岛国种子电影资源| 色欲天天婬香婬色综合网| 亚洲AV无码专区亚洲AV裸体| 久久国产精品www| 色情无码永久免费视频软件| 国产精品视频免费观看调教网| 精选午夜精品福利视频导航| 亚洲鲁起秋霞a| 日韩四方Av无码久久Av| A毛片免费全部在线看| 人妻av无码专区久久| 免费看A级毛片视频| 久久精品免费i 国产| 欧美欧美二区毛大片| 在办公室被C到呻吟的动态图| 欧美av色香蕉一区二区蜜桃| 草莓视频在线观看成人版| 亚洲国产精品久久精品久久| 一下又一下的好爽好刺激| 免费看黄软件不花钱| 99在线视频观看| 伊人精品久久久大香线蕉精品国产一区二区三区久久狼 | 精品久久成人区二区| 色www永久免费看| 男人插女人网站| 97免费视频在线| 亚洲国产精品99一区在线| 国产黄色大片免费播放| 国色天香精品一卡2卡3卡| 成人福利午夜A片公司 | 亚洲丰满多毛的隂户| 欧美一区二区三区久久妇| 18款禁用арр软件网站| 久久久久亚洲āv无码专区网站| 青青国产成人综合在线| 国产日精品久久久久久| 久爱精品视频在线视频| japanesevideo国产在线观看| 久久精品视频黄色| 亚洲一级aⅴ片观看| 日本乱理论片免费看| 丰满成熟熟妇乱又伦精品 | 又黄又爽又刺激的视频| 国产片3p视频在线观看| 亚洲v欧美v日韩v国产v| 国产免费?ⅴ片在线无码免费看 | 国产日韩精品亚洲图片自拍| 粉嫩av中文一区二区三区| 娇妻被朋友玩得呻吟在线电影| 在线视频精品人妻| 久久中文字幕免费高清| 日韩少妇高清无码一区毛片| 99国产精品久久久久久久久久| 办公室爆乳在线| 欧美成人精品福利在线观看| 亚洲欧美国产高清| 91嫩欧美BT亚洲BT日韩BT| 91性爱在线视频| 天天做天天爱天天爽天天综合网| 琪琪秋霞午夜av影视在线| 国产精品久久久av美女片| 欧美日韩一区二区三区自拍| 粗大的内捧猛烈进出视频在线| 日本三級韓國三級香港三級A級 | 日产乱码一区二区三区在线| 国产精品扒开做爽爽的视频| 国产操逼精品| 国产精品三级?v及在线观看 | 好色先生视频APP污下载| 视频二区精品中文字幕| 巜熟妇的荡欲朱莉安妮| 午夜福利免视频100集2024| 亚洲午夜黄色av| 美女啪啪啪性感视频| 美女扒开尿孔让男人捅| 国产欧美日韩综合精品三区| 顶级大但人文艺术巫| 91蜜桃在线观看| 五月丁香激情综合亚洲麻豆精品| 被下春药强伦人妻HD| 国产影视无码久久| 日本在线一级aaa片| 欧美午夜免费一区二区桃色| 啊轻点灬太粗嗯太深了快三| 一区二区三区无码日韩国产粉嫩tv| 鸥美一级久久久精品| 国产91模特无码| 欧美一区二区三在线| 免费无码成人a片小视频| 一一本大道无码人妻精品| 欧美国产第一页浮力操影频操| 一区二区三区av免费观看网站| 中文字幕国产精品久久久| 女人色国产a精品| 巜熟妇的荡欲朱莉安妮| 曰本美女一级婬片拍拍免费 | 久久精品东京热最新无码av| 国产V片免费观看| 琪琪热码在线中文字幕| 国产一级二级三级无码影院| ssss在线观看国产| 欧美一级高清A片费观看| 国产高清成人av片| 99精品热在线观看视频手机| 好男人社区视频在线| 国产一区二区不卡在线播放福利| 免费毛片在线视频| 欧美激情精品久久久久久大尺度 | 欧美日韩国产高清视频二区| 激情五月天天婷婷| 亚洲 成人 综合 中文 伊人| 免费看黄视频网址| 98色花堂国产精品首页| 成人4399看片hd免费| 国产黄色片在线免费看| 精品 无码 免费 国产| 国产免费中文字幕?v在线| 久久久国产亚洲欧美电影| 国产日韩精品一区二区三区在线观| 精品高清美女精品国产区| 女厕清晰peepwc偷窥| 亚洲国产综合av在线观看| 亚洲AV永久无码精品爱妃影视| (愛妃視頻)无码精品人妻一区二区三区中| 国产免费丝袜调教视频免费的| 99热这这里只有是精品| 精品人妻人人爽久久爽av蜜桃 | 800在线观看国产一区| 桃色五月天丁香国产综合美女在线| 爱情岛1号线和2号线测速| 亚洲国产精品午夜电影| 国产精品久久久久无码a麻豆 | 亚洲乱码久久av| 亚洲精品无码一级毛片| 国产精品亚洲天堂网不卡| 97一本大道波多野吉衣| 99久久国产一区二区| 机机对机机手机免费下载版大全2022| 在线人成视频播放午夜福利网站| 午夜一级真人免费毛片在线视频 | 深田咏美AV一区二区三区| 人妻护士痴汉电车HD| 日韩精品高潮激情在线观看| 成人福利午夜A片公司| 成人亚洲免费影视| 精品无码一区二区三区Av深田 | 国产成人欧美一本区| 国产日韩免费观看| 欧产日产国产不卡一二三区亚洲日韩在线中文字幕综 | 少妇激情出轨100篇| 国产 精品 短视频 一区| 欧美高清免费刺激视频网站| 日本亚洲免费播放| 国产影视无码久久| 老子无码午夜中文字幕影| 少妇午夜精品福利一区二区三区蜜桃 | 亚洲欧美一区三上悠| 精品三级无码国产在线观看| 免费看黄视频网址| 蜜桃久久精品久久| 久久久综合人妻少妇| 国产生活片久久| 网友自拍日韩精品| 国产另类小说在线视频| 久久精品久久久久久久精品| av无码中文字幕在线天| 中文字幕黄色av首页网站| 国产无码一二三不卡视频| 欧美13一14周岁a种子| 色88久久久久高潮综合影院| 亚洲综合自拍精品在线| 日本a视频在线观看| 国产免费看18禁止观看网站色欲| 亚洲国产欧美中文永久| 国产日韩欧美有码在线观看| 四虎av无码专区亚洲av| 伊人免费在线1| yellow视频免费观看| 国产精品区一二三四久久| 国产成人a亚洲精品| 麻豆传媒还能在哪里看| 波多野结衣午夜福利| 青青草原亚洲精品在线观看| 亚洲第一色片曰本毛片| 亚洲热妇无码A∨在线播放| 最近中文字幕大全| 国产精品一级A精品特黄A| 欧美另类交视频| 久久精品国产国产毛片| 免97狼人久久伊人精品| 日韩中文字幕久久版| 一区二区三区四区三级片| 熟女aV一区二区在线| 国产高清成人av片| www欧美日韩成人| 一级片久久久久久| 久久午夜亚洲国产av| Aⅴ无码东京热亚洲男人的天堂| 六月丁香久久婷婷色综合| 性无码免费一区二区三区| 久久九九性爱视频| 日韩精品一区二区三区不卡视频| 少妇午夜精品福利一区二区三区蜜桃 | 亚洲丰满少妇自慰呻吟| 精品三级自拍高清| 欧洲激情在线观看| 四虎av无码专区亚洲av| 日韩?V无码一区二区三区不卡| 波多野结衣在线观看免费区| 一级 黄 色 片免费亚洲| 色欲av中文字幕亚洲无线码| 国产一区二区三区在线观看精品| 亚洲性爱视频免费看| 99精品热视频只有精品10| av无码免费性爱| 麻豆果冻国产剧情Aⅴ在线播放| 国产乱码精品一区二区三区字幕| 中文字慕在线不卡| 一个人看的免费观看日本| 久久久精品少妇3p| 国产日精品久久久久久| 国产综合亚洲日韩| 亚洲av 一卡二卡| 亚洲免费成人av电影| 女人爽得直叫免费视频| 91久久午夜视频| 9视频国产1在线观看免费| 惠民福利国产精品v欧美精品v日韩精品| 99精品福利国产在线| 免费一区二区三区高清免费播放| 欧美性爱中文字幕无线码| 日韩人妻无码AⅤ中文字幕你懂的 欧美成人免费VA影院高清 | 久久综合色一综合色88| 丁香五月婷婷成人丁香五月五月婷婷231| 在线成年视频人网站观看新| 国产精品久久久久无码毛片| 無遮擋免費視頻| 在线一二三区国产色情无码电影| 成人久久三人毛片最新| 九九久久免费视频| 亚亚洲一区日韩高清中文字幕亚洲 | 91青青青精品国产碰在线观看| 日韩欧美麻豆不卡一区二区| 国产美女大尺度在线观看| 99久久精品国产第一页| 国产日韩欧美在线播放视频| 天堂系列97小嫩模在线观看| 国产成人91亚洲精品| 亚洲AV蜜桃永久无码精品XXX| 亚洲AV小说最新在线网址| 97人妻欧美在线| 国产免费丝袜调教视频免费的| 国产亚洲日韩欧美| 先锋影音AV资源在线高清| 黄色电影一级免费看| 玉米视频app在线观看| 美女胸又大又黄又www的网站 | 极品嫩模一区二区三区| ?v天堂影音先锋| 亚洲欧洲国产经典大片| 成年人电影中文字幕| 亚洲丰满少妇XXXXX高潮对白| 国产激情视频在线观看免费播放| 亚洲乱码尤物193yw在线播放 | 欧美日韩无黄色一级| 在线日本视频天堂| 自拍欧美影视亚洲| 亚洲精品电影天堂网| 日韩av网站大全在线| 性欧美丰满熟妇XXXX性仙踪林| 午夜中国女人性在线| 麻豆国产91在线播放 | 大家可以在这里91香蕉视频在线下载 | 国产亚洲美日韩AV中文字幕| 亚洲成人在线观看免费二区| 亚洲自拍欧美卡通另类p| 日韩中文字幕久久版| 在线国产第一页1024| 四虎www成人影院在线观看 | 一本无码aⅴ久久久国产| 97国产永久网址在线观看| 欧美一级淫荡免费观看| 影音先锋电影aⅤ资源| 亚洲欧洲a∨综合色无码| 一级毛片视频在线看| 无遮挡又黄免费视频| 噜噜噜噜噜久久久久久91| 亚洲最大在线网站| 综合欧美一区二区三区| 亚洲色欲天天天堂色欲网91| 粉嫩AV一区二区三区在线| 国产?级理论片无码老男人 | 久久久精国产精品720| 爱妃国产99久久精品播放| 秋霞影院亚洲wm| 一级特级aaaa真人片免费观看| 影音先锋在线免费资源| 人妻中文字幕aⅤ精品视频| 青青在线经典视频在线| 久久精品成人午夜电影| 亚洲日韩AV在线中日综合| 国产乱色国产精品免费| 性欧美ⅩXX1819内谢人妻欧美片| 精品人妻无码区二区三区密桃| 国产天天强奸三级片| 婷婷五月国产手机在线视频| 精品一区精品二区| 森林原人+无码番号| 亚洲欧美自拍偷拍一区二区三区四区五区| 伊人999精品视频| 无码88aⅴ欧美熟妇人妻影院| 国产性爱在线观看欧美亚洲黄片| 黃色片免費觀看網站| 2021国产手机在线精品| 成在线人免费视频播| 三级国产人成在线亚洲视频观看h| 91看片网站免费看| 亚洲影院免费观看| 国产女同互慰高潮流水视频| 一级做人免费观看c欧美网站| 亚精品无码一区二区三区色欲av| 国产乱淫av片免费网站| 无码精品?∨在线观看免费| 国产亚洲欧美视频久久| 国产免费分钟视频| 日韩亚洲精品视频| 在线观看av网站免费观看| 秋葵视频色色软件免费| 午夜一级真人免费毛片在线视频| 公交车上双乳被老汉揉搓玩 | 黄色大成网站| 亚洲精品成人婷婷| 加勒比东京热无码一区| 成人影院久久| 日韩欧毛片免费视频| 午夜福利精品在线| 欧美人最猛性xxxxx| 亚洲成α∧人片在线播放无码 | 2020最新中文字幕在线| 亚洲天堂高清在线观看| 亚洲精品夜夜做人人爱| 亚洲综合福利| 免费看黄软件不花钱| 成人国产在线小视频| 国产亲子乱a片免费视频| 日本在线观看高清小视频| 男女裸交啪啪激高潮出水 | 精品一区二区三区免费毛片| 超碰无码精品一区二区三区| 影音先锋电影aⅤ资源| 国产日韓无码一区二区三区| 精品久久理论经典| 永久刷qq黄钻网站免费软件| 一本久久a久久精品亚洲| 日本无码h肉3d动漫动态图| 另类五月亚洲图片| 久久影院午夜伦手机不四虎卡| 亚洲高清一区二区三| 精品无码欧美一区二区三区不卡 | 亚洲成ā∨人片在线观看无码 | 日本女人牲交视频免费看| 国产无码乱伦一区| 男人猛躁进女人的毛片A片| 免费看黑人男阳茎进女阳道视频| 老牛嫩草一区二区三区av| 精品欧洲av无码一区二区三区14| 欧美av色香蕉一区二区蜜桃| 好吊视频一区二区在线视频观看| 精品日韩中文字幕无码专区 | 久久国产99久久国产久麻豆| 无码人妻丝袜视频| 亚洲国产午夜精品理论片无删减| 国产国语精彩对白在线观看| 亚洲精中文字幕无码专区一| 欧美96高清乱妇视频| 中文字幕在线看 天天干夜操| 亚洲精品欧洲精品乱码不卡| 快速了解久久亚洲中文字幕| GOGO大胆全球裸XXXX| 国才精品成人99久久久久| 成人午夜福利av影视| 国产国语精彩对白在线观看 | 国产亚洲一区二区三不卡| 国产剧情黄色91| 国产精品日产无码aⅤ永久不卡 | 东北妇女高潮高清视频大全| 免费主播福利视频韩国日本 | 大陆一级黄色a乱人国产片| 国产亚洲精品AA片在线直播| 一本综合久久国产二区| 视频一区欧美亚洲| 精品99在线网站| 无码一级高清| 亚洲欧美综合国产精品一区| 图片区偷拍区小说区视频| 波多野结衣在线视频免费观看| 国产综合成人观看在线| 五月天婷婷精品免费视频| 两个人无码免费操逼视频| 亚洲欧美一区三上悠| 亚洲一区二区一级视频免费看| 亚洲乱码尤物193yw在线播放| 国产婷婷久久婷婷| 国产精品高清一区二区av片| 免费A级毛片在线看| 国产亲子乱a片免费视频 | 欧美一区二区三区性视频| 国产国拍亚洲精品永久无码| 一区青椒午夜剧场| 欧美熟妇的荡欲在线观看| 国产骚妇资源在线观看| 被强硬侵犯人妻HD中文| 国产精品久久久久无码a麻豆| 曰韩国产高清无码| 精品国产福利在线观看vr| 99精品热视频只有精品10| 国产情侣自拍AV| 欧美亚久久综合一区二区色| 国产午夜激无码av毛片久久| 扒开腿挺进湿润的花蕊| 五月激情六月丁香| 国产91久久无码精品亚洲日韩| 国产三級精品片免费播放| h无码视频在线播放| 91久久青青草原免费| 久久久亚洲一区二区三区中文字幕| 2020中文字幕无码专区| 少妇精品无码视频播放| 陥没乳首亚洲精品| 成人免费一区二区三区牛牛| yellow视频免费在线观看| 久久精品成人一区二区三区蜜臀| 欧洲性爱第一页| 成人AV在线天堂一区二区三区| 国产一级一交一乱视频| 国产午夜亚洲精品aⅴ网站| 精品精品国产高清a毛片色噜噜 | 97福利不卡视频一区二区| 正在播放国产爆浆| 噜噜噜私人影院| a亚洲欧美中文日韩v日本| 成人3D无遮H动漫| 激日韩高潮久久精品| 最近高清免费观看日本| 色噜噜狠狠成人中文综合18| 起碰起在线视频公开免费| 精品人妻人人爽久久爽av蜜桃| 久久不卡人妻无码| 国产电影久久精品| 91精品福利在线观看播放| 亚洲精品高清毛片| 北条麻妃jul一773在线看| 级毛片内射视频| 国产精品自产拍在线观看一区| 日韩免费在线观看一区二区三区| 我在KTV被六个男人玩一晚上| 全免一级久久久久片| 在线视频播放免费视频| 色色色免费视频| 一区二区三区av免费观看网站| 亚洲av无码国产精品色午夜| 久久久久人妻一区精| 九九精品视频在线插放| 国产高清免费| 欧美精品国外破除大片扒开特写| 青青草原亚洲精品在线观看| 沟沟人体一区二区| 丁香花在线电影小说| 亚洲午夜久久久久久国产精品| 成人黄色大片在线播放| 精品资源在线视频| 131美女视频爱做国产| 亚洲欧洲国产1区二区| 黄色成人网站免费欧美| japanese色国产在线看| 在線不卡一區二區三區日韓| 一级A午夜福利免费区试看| 中文字幕视频一区亚洲欧美 | 色欲av蜜臀AV永久无码精品| 久久黄色视频免费观看| 疼痛有声音免费下载app大全| 久久久一夲精品99久久精品66| 国产日韩欧美视频免费观看一区二区三区 | 国产男女激情无遮掩免费看| 中文字幕在线永久播放| 日韩高清一区二区三区直播在线| 公公舔我好舒服哦噢喔免费播放| 欧美中文字幕有码无码| 99re6热在线视频精品| 日韩欧美中文字幕无码| 97干美午夜精品乱人伦小说区 | 国产一级a爱大片| 亚洲?v无码专区国产乱码在线| 日本在线不卡一区二区三区| 国产av天堂亚洲国产av麻豆| 欧美一级A欧美黑人AAAA| 亚洲国产视频a在线观看| 久久中文字幕免费高清| 日韩黄色性爱一级视频| 三级国产人成在线亚洲视频观看h| 一级黄日本C爱视频| 国产精品一级毛片无码视频| 极品美女扒开粉嫩小泬| 日本三級韓國三級香港三級A級| 香蕉国产亚洲一区二区三区| 九九热精品在线观看视频| 亞洲AV成人AV天堂| 成人免费综合婷婷在线| 精品亚洲成?人片在线观看少妇 | 免费观看亚洲毛片| 在线国产精品自拍iln| 欧美日韩不卡一区视频在现| 亚洲A∨日韩精品久久久久久A| 不卡无码av一区二区| 国产成人国产A∨国片精品白丝美女视频| 免费一区二区三区高清免费播放| 假戏真做红肿侵犯h| 国产A级作爱片视频| 最近中文字幕免费国语| 亚洲天堂高清在线观看| 日韩亚洲欧美电影区| 十八禁的黄污污免费网站| 亚洲日韩线精品一区一区一区| 国产精品久久久av美女片| 国产精品免费成人| 男的把J桶进女的屁股GIF动态图| 日韩人妻无码一区二区三区| 一本久久a久久精品亚洲| 99免费在线视频| 国产二区日韩AV制服丝袜| 亚洲乱码久久av| 歐美性受xxxx噴水視頻| 三级黄色毛片在线免费| 欧美日韩中文在线字幕视频| 老司机永久网站免费视频真人 | 亚洲三级在线观看视频| 粉嫩AV一区二区三区在线| 最近中文字幕大全| 亚洲三级在线观看视频| 在线观看一区二区三区四区| 欧亚v视频日韩一区二区| 最新一本在线无码视频| 欧美日韩人妻精品系列一区二区| 国模大尺度炮交视频免费看| 色老头在线视频免费观看| 国情侣偷拍视频在线看出租屋| 一级a婬片直播视频| 亚洲全网成人资源在线观看| 成在人线av无码高潮喷水免费| 国产精品综合日韩在线| 高清无H码动漫在线观看网站| 久久綜合本色宗合一本色| 98超碰人人与人人| 肥熟女视频一区二区三区国| 一级伦奷视频无遮挡| 成人毛片女人毛片| 无码精品?∨在线观看免费| 国产黄片三级在线播放| 特级婬片内谢aaa毛片| 欧美一区二区三在线| 精品国产福利在线观看vr| 成人全免费高清观看| 欧美一级视频97| 国产精品一线天在线观看| 国产精品毛片一区二区16 | 亚洲高清最新AV网站| 国产精品色网视频网| 在线观看欧美国产日韩一区二区| 亚洲成av人片在线播放亚洲AV无码成人精品区 | 亚洲成在线aⅴ免费视频| 国产亚洲精品久久一区二区三区 | 狠狠干狠狠干香蕉视频| 亚洲第一精品卡通动漫在线观看 | 免费一级毛片清高播放的在线直播平台| 四虎影视成人精品| 亚洲性爱精品久久| 在线你懂的亚洲专区| 大乳欲一区二区三区| 无码中文zx在线| 92国产精品综合在线| 99热门精品一区二区| 中文字幕玖玖资源亚洲精品| 男女肉粗暴进来动态图| 日韩欧毛片免费视频| 免费无码黄网站在线观看| 激情综合国产成人AV| 她的两片蚌肉慢慢张开| 少妇激情出轨100篇| chinasex喷白浆videos自慰| 美女老黄一区二区| 国产精品久久久久影视不卡| 精品一区二区午夜福利| 2024国产高清日本一道| 国产91在线九色| 日本高色高清视频免费| 亚洲最大在线网站| 日韩中美精品中文| (爱妃)亚洲欧美综合中文字幕| 日本一本草久国产欧美日韩| 又爽又黄又刺激国产AV片 | 性感JK福利在线播放| 网友自拍一区| 在厨房做饭拉起裙子做说说| 国产极品喷水视频| 欧美va亚州ⅴa在线观看| 高清无H码动漫在线观看网站| 天天天天噜在线视频| 欧美三级网络在线观看| 亚洲无码黄色片网站| 日本精品91久久久| 大大香蕉国产线视频免费| 无码高潮爽到喷水视频| 一级片久久久久久| 99R在线观看视频精品| 亚洲成人午夜精品电影| 部队高g高h太爽太粗在线播放| 人妻少婦一區二區三區| 国产日韩未满十八禁止在线观看 | 被群cao的合不拢腿h小说| 国产无码一二三不卡视频| 欧洲亚洲美洲VA国产综合| 婷婷深爱亚洲五月| 2021国产亚洲日韩精品| 在线观看高清h片| 欧美黑人精品三级网站| 国产情侣露脸自拍| 国产精品美女后入一区二区 | 日本xxxx色视频在线观看免费网站| 国产乱淫av片免费网站| 成人亚洲黄片欧美日韩| 日韩亚洲欧美电影区| 午夜天堂视频无码免费| 国产亚洲午夜一区二区三区| 国产国产成人精品久久蜜| 久久中文字幕亚洲| 欧美激情办公室黑人aⅴ| 少妇中文综合欧美| 嗯啊开小嫩苞好深啊H视频| 国产美女裸体黄污网站免费观看 | 久久精品亚洲精品一区| 91久久亚洲欧美一区二区| 中文无码妇乱子伦视频国产精品亚洲LV粉色 | 国产TV欧美TV亚洲Tv| (愛妃視頻)国产精品亚洲ΑV天堂无码| 一本不卡视频在线久| 成人黄色大片在线播放| 亚州精品无码久久久久av| 亚洲AV永久无码精品国产片| 久久免费精品视频互動交流| 国产一区 久久久| 国产亚洲?ⅴ人片在线观看| 精品久久久久久人妻中文字幕| 国产国语精彩对白在线观看 | 国产丝袜女主播在线观看| 久久性精品视频99| 日韩无码二区三区| 综合七月丁香激情啪啪| 国产精品白丝自| 在线视频久久只有精品第一日韩 | 亚洲美女销魂久久| 男女深夜无套内射在线观看| 97精品伊人久久久大香線焦 | 国产在线观看91香蕉| 婷婷网五月天天综合天天爱| 惠民福利亚洲欧美另类国产中文| 337p日本欧洲亚洲大胆在线| 亚洲无码性爱视频在线播放| 日韩欧美亚洲每的更新在线| 国产精品国产精品无码露脸| 男同桌玩我奶头我j扒我内衣内裤| 久久99热精品免费观看动漫| 99久久精品国产第一页| 亚洲小说图片电影| 亚洲一本二本av| 亚洲av无码成人精品区网页| 一级毛片福利午夜电影| 国产女同互慰高潮流水视频| 欧美一区性感91九色婷婷| 超级婬乱人妻av无码| 黄黄的软件在线观看| 国产精品日产无码aⅤ永久不卡| 亚洲中文字幕制服自拍| 国产午夜中文字幕在线观看| 国产精品免费成人| 久热手机在线国产视频 | 国产免费丝袜精品视频| 亚洲AV无码国产精品色字幕综合 | 97干美午夜精品乱人伦小说区| 四虎在线观看一区二区三区| 九一成人在线观看| 粉嫩av中文一区二区三区| 伊伊人成亚洲综合人网7777综合人妻久久一区二区精品 | 高清国产人妇牲交视频| 国产中文字幕综合色| 久青草18在线观看视频 | 欧美日韩国产精品久久一区| 亚洲婷婷六月丁香| 午夜福利杨幂在线视频| 草莓丝瓜视频秋葵视频| 99久久国产综合精麻豆| 日本阿v手机不卡在线观看视频| 国产电影久久精品| 亚洲精品成?人在线观看| 国产天堂AV在线色| 麻豆91精品久久久| 91看片网站免费看| 少妇午夜精品福利一区二区三区蜜桃| 亚洲日韩AV在线中日综合| 久久精品自慰流水喷白浆免费| 色吊絲中文字幕| 影音先锋成人网站| 欧洲性爱第一页| 欧美性a在线香蕉| 学生的粉嫩小泬图片| 99国产精品国产热久久| 亚洲综合日韩欧美一区二区| 香蕉国产精视频在线观看| 成人黄色大片在线播放| 中文天堂WWW网在线最新版 | 欧美av色香蕉一区二区蜜桃| 一级 黄 色 片免费亚洲| 99久久婷婷国产一区二区| 中文精品亚洲制服无码AV| 三个男人玩弄娇妻高潮| 成人激情午夜福利| 欧美日韩国产第1页| 亚洲丰满少妇XXXXX高潮对白| 體育生gay自慰網站| 看亚洲一级黄色片| 亞洲av無碼xxx麻豆艾秋| 国产欧美三级在线观看| 18禁在线无遮挡羞羞漫画| 亚洲成在线aⅴ免费视频| 一区二区三区中文字幕精品久久久久久综合日本 | 国内精品久久久久久久久| 免费人成视频x8x8入口观看大 | 国产视频适合在网上看的和出水了| a片强制妇女高潮成人片在线观看| 在线播放亚洲一区欧美二区| 国产亚洲精品影视| 亚洲av无码国产精品色在线看不卡 | 欧美日韩v在线观看不卡 | 免费无码国模国产在线观看| 亚洲А∨天堂乱纶在线| 国产主播AV福利精品一区| 国产TV欧美TV亚洲Tv| 中文欧美亚洲欧日韩一| 久久精品a无码中文字字幕| 亚洲成片在线看免费| 中出内射国产欧美日韩99久久| 冲田杏梨在线播放一区二区不卡 | 免费看A级毛片视频| 熟女中文字幕免费| eeuss秋霞成人影院| 另类激情亚洲| 国产影视无码久久| 黄色高清无码在线| 亚洲一区二区激情网| 2021国产手机在线精品| 日日草天天干| 日本少妇老师激情24P| 日韩成人欧美在线| 欧美黑人一区二区三区看片| 亚洲精品成?人在线观看| 三级片s色国产视频精品| 国产日本在线影院全集在线观看免费版高清 | 亚洲综合日韩欧美一区二区| 综合色区偷拍| 亚洲精品成ā人在线观看| 亚洲另类 小说 国产精品| 久久免费国产精品| 亚洲小说色图| 91精品国产白丝袜网址| 国产视频黄色免费| 内射国产日韩视频| 亚洲高清自有吗中文字| 秋霞成人欧美手机鲁丝片| 天堂国产永久综合人亚洲欧美 | 美女18禁一区二区三区视频| 插深大粗黑视频欧洲日韩| 无码一级毛片人妻开车黄| 亚洲欧洲制服人妻成人动漫| 国产磁力链接在线播放| 中文字幕精品国产片在线观看| 青青草视频日本| www.无码一级视频| 国产欧美综合在线系列| 亚洲日韩人妻在线图片视频 | 色婷婷樱桃Av一区二区| 久久美女福利视频| 欧美肥胖老太VIDEOS另类| 免费人成视频年轻人在线无毒不卡| 日韩欧洲影视网经典电影在线观看免费观看 | 久久精品性无码一区二区爱爱| 精品一区二区三区免费毛片| 最新国产自产在线播放| 亚洲成在人线在线播放无| 人妻少婦一區二區三區 | 国产一级电影在线观看| 国产午夜精品视频在线播放| 国产精品色网视频网| 惠民福利国产精品v欧美精品v日韩精品 | 欧洲性爱第一页| 免费看黑人男阳茎进女阳道视频 | 国产操逼精品| 成人三级网站国产| 131美女视频爱做国产| 久久精品女人天堂| 91页国产在线自啪| 一区二区熟女日韩| 综合七月丁香激情啪啪| 丝袜中文欧美日韩日韩精品| 亚洲午夜嘿嘿视频| 亚洲?V片劲爆在线观看| 美女裸体毛片国产| 亚洲影院免费观看| 了解最新亚洲一区中文字幕| 日韩高清不卡精品免费在线播放| 国内精品久久久久久久久| 欧美人妻无码A级视频| 亚洲精品无码aⅴ中文字幕蜜桃 | 图片区偷拍区小说区视频| 免费视频在线观看69| 星巴克网站免费| 欧洲精品无码1区2区3区| 麻花豆剧国产MV在线看| 国产精品久久久av美女片| 综合久久综合| 老头把我添高潮了| 一夲道av无码免费中文字幕| 伊人情人网 综合| 天堂国产永久综合人亚洲欧美| 激情五月天在线激情| av天堂亚洲色图在线| 日韩电影大全| 天堂免费在线观看亚洲| 日韩精品一区二区三区入口| 成人免费一区二区三区牛牛| 国产精品成人va在线观看网| 鸥美一级久久久精品| 国产极品超爽巨色av一区| 免费无码一区二区三区A片|