日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中CheckBox与CompoundButton源码解析

發布時間:2024/8/1 Android 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中CheckBox与CompoundButton源码解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經歷過了前面一系列的講解,下面我們直接來看看系統里面的CheckBox與CompoundButton類的源碼文件。你肯定會發現很多熟悉的地方。
結合下面源碼,我們對它們進行解析解析,它里面使用的就是自定義drawable state。

我們首先直接看CheckBox的源碼

public class CheckBox extends CompoundButton {public CheckBox(Context context) {this(context, null);}public CheckBox(Context context, AttributeSet attrs) {this(context, attrs, com.android.internal.R.attr.checkboxStyle);}public CheckBox(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overridepublic void onInitializeAccessibilityEvent(AccessibilityEvent event) {super.onInitializeAccessibilityEvent(event);event.setClassName(CheckBox.class.getName());}@Overridepublic void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {super.onInitializeAccessibilityNodeInfo(info);info.setClassName(CheckBox.class.getName());} }

我們可以看到,它里面并沒有做什么,因為它的操作都是繼承自CompoundButton.

我們先來看看下面一個普通的布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin"tools:context=".MainActivity"><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="CheckBox"/></RelativeLayout>

在上面的這個相對布局中,就寫了一個CheckBox,我們什么都不做,直接運行代碼,就會看到下面的運行界面:

當我們單擊這個CheckBox,我們發現他會被選中,那么它內部到底是怎么實現的呢?
其實使用過drawable state的人應該對這個并不陌生,我們經常這樣做:

1、在res/drawable文件下創建selector.xml,示例代碼如下:

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="false"android:drawable="@drawable/title_button_back"></item><item android:state_pressed="true"android:drawable="@drawable/title_button_back_h"></item><item android:state_window_focused="false"android:drawable="@drawable/title_button_back"></item> </selector>

2、編寫布局文件,為布局文件中的ImageButton設置selector,示例代碼如下:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="fill_parent"> <ImageButton android:id="@+id/title_IB"android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="#00000000" android:layout_marginRight="4dp" android:layout_centerVertical="true" android:src="@drawable/selector"></ImageButton> </RelativeLayout>

當我們單擊這個圖片按鈕的時候,圖片按鈕的圖片就會發生變化,其實CheckBox也是這樣做的,只是這些系統為我們做了。

下面我們來看看系統實現源碼:
上面在布局文件中直接寫了一個CheckBox,布局文件被解析后就會實例化這個CheckBox對象,就會執行CheckBox的構造函數:

public CheckBox(Context context, AttributeSet attrs) {this(context, attrs, com.android.internal.R.attr.checkboxStyle); }public CheckBox(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle); }

從上面我們可以知道兩點:
1、CheckBox的默認樣式是com.android.internal.R.attr.checkboxStyle
2、最終執行的時候CompoundButton的構造函數

在frameworks/base/core/res/res/values/themes.xml文件中,已經初始化了checkBoxStyle樣式:

<item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBox</item>

在frameworks/base/core/res/res/values/styles.xml文件,我們來看看它的樣式是什么:

<style name="Widget.CompoundButton.CheckBox"><item name="android:button">?android:attr/listChoiceIndicatorMultiple</item> </style>

在frameworks/base/core/res/res/values/themes.xml文件:

<item name="listChoiceIndicatorMultiple">@android:drawable/btn_check</item>

可以看到,CheckBox的默認樣式就是給它的button屬性賦值了一個btn_check,我們來看看btn_check文件里面的具體內容。

在frameworks/base/core/res/res/drawable/btn_check.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"><!-- Enabled states --><item android:state_checked="true" android:state_window_focused="false"android:state_enabled="true"android:drawable="@drawable/btn_check_on" /><item android:state_checked="false" android:state_window_focused="false"android:state_enabled="true"android:drawable="@drawable/btn_check_off" /><item android:state_checked="true" android:state_pressed="true"android:state_enabled="true"android:drawable="@drawable/btn_check_on_pressed" /><item android:state_checked="false" android:state_pressed="true"android:state_enabled="true"android:drawable="@drawable/btn_check_off_pressed" /><item android:state_checked="true" android:state_focused="true"android:state_enabled="true"android:drawable="@drawable/btn_check_on_selected" /><item android:state_checked="false" android:state_focused="true"android:state_enabled="true"android:drawable="@drawable/btn_check_off_selected" /><item android:state_checked="false"android:state_enabled="true"android:drawable="@drawable/btn_check_off" /><item android:state_checked="true"android:state_enabled="true"android:drawable="@drawable/btn_check_on" /><!-- Disabled states --><item android:state_checked="true" android:state_window_focused="false"android:drawable="@drawable/btn_check_on_disable" /><item android:state_checked="false" android:state_window_focused="false"android:drawable="@drawable/btn_check_off_disable" /><item android:state_checked="true" android:state_focused="true"android:drawable="@drawable/btn_check_on_disable_focused" /><item android:state_checked="false" android:state_focused="true"android:drawable="@drawable/btn_check_off_disable_focused" /><item android:state_checked="false" android:drawable="@drawable/btn_check_off_disable" /><item android:state_checked="true" android:drawable="@drawable/btn_check_on_disable" /></selector>

我們看到,state_checked為true的時候,drawable=”@drawable/btn_check_on”,state_checked為false的時候,drawable=”@drawable/btn_check_off”.
@drawable/btn_check_on圖片和@drawable/btn_check_off圖片,在frameworks/base/core/res/res/drawable我們可以找到:

我們可以看到,其實就是根據不同的狀態,為button屬性賦值了不同的圖片資源,這就是我們看到的效果。

state_checked這個狀態的定義,在下面進行了定義:

<declare-styleable name="DrawableStates"><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable},set when a view has input focus. --><attr name="state_focused" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable},set when a view's window has input focus. --><attr name="state_window_focused" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable},set when a view is enabled. --><attr name="state_enabled" format="boolean" /><!-- State identifier indicating that the object <var>may</var> display a check mark.See {@link R.attr#state_checked} for the identifier that indicates whether it isactually checked. --><attr name="state_checkable" format="boolean"/><!-- State identifier indicating that the object is currently checked. See{@link R.attr#state_checkable} for an additional identifier that can indicate ifany object may ever display a check, regardless of whether state_checked iscurrently set. --><attr name="state_checked" format="boolean"/><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable},set when a view (or one of its parents) is currently selected. --><attr name="state_selected" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable},set when the user is pressing down in a view. --><attr name="state_pressed" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable},set when a view or its parent has been "activated" meaning the user has currentlymarked it as being of interest. This is an alternative representation ofstate_checked for when the state should be propagated down the view hierarchy. --><attr name="state_activated" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--><attr name="state_active" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--><attr name="state_single" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--><attr name="state_first" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--><attr name="state_middle" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}.--><attr name="state_last" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable},indicating that the Drawable is in a view that is hardware accelerated.This means that the device can at least render a full-screen scaledbitmap with one layer of text and bitmaps composited on top of itat 60fps. When this is set, the colorBackgroundCacheHint will beignored even if it specifies a solid color, since that optimizationis not needed. --><attr name="state_accelerated" format="boolean" /><!-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable},set when a pointer is hovering over the view. --><attr name="state_hovered" format="boolean" /><!-- State for {@link android.graphics.drawable.StateListDrawable StateListDrawable}indicating that the Drawable is in a view that is capable of accepting a drop ofthe content currently being manipulated in a drag-and-drop operation. --><attr name="state_drag_can_accept" format="boolean" /><!-- State for {@link android.graphics.drawable.StateListDrawable StateListDrawable}indicating that a drag operation (for which the Drawable's view is a valid recipient)is currently positioned over the Drawable. --><attr name="state_drag_hovered" format="boolean" /><!-- State for {@link android.graphics.drawable.StateListDrawable StateListDrawable}indicating that a View has accessibility focus. --><attr name="state_accessibility_focused" format="boolean" /> </declare-styleable>

我們可以看到<attr name="state_checked" format="boolean"/>

下面我們看看CompoundButton的構造函數,因為CheckBox最終執行的是它的構造函數。

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(); }

我們可以知道CompoundButton自定義了兩個屬性,進入frameworks/base/core/res/res/values/attrs.xml文件:

<declare-styleable name="CompoundButton"><!-- Indicates the initial checked state of this button. --><attr name="checked" format="boolean" /><!-- Drawable used for the button graphic (e.g. checkbox, radio button, etc). --><attr name="button" format="reference"/> </declare-styleable>

我們可以看到它定義了兩個屬性:checked,button,一個存放的是一個boolean類型的值,表示是否被選中,一個存放的是引用類型,對應的是一個圖片。
在構造函數中,我們獲取到了這兩個屬性值。上面就是對button這個屬性進行了默認賦值,然后我們這里就可以獲取到上面的btn_check這個xml文件的drawable。
也就是說Drawable d = a.getDrawable(com.android.internal.R.styleable.CompoundButton_button)中的d的到的就是btn_check這個xml文件的drawable。

然后分別調用了setButtonDrawable(d)和setChecked(checked)來對我們自定義的控件進行了設置。

我們來看看setButtonDrawable(d)函數:

public void setButtonDrawable(Drawable d) {if (d != null) {if (mButtonDrawable != null) {mButtonDrawable.setCallback(null);unscheduleDrawable(mButtonDrawable);}//這里設置Callback的原因就是refreshDrawableState刷新的時候可以回調到invalidateDrawable//這樣就可以重繪,這個我們在#詳解refreshDrawableList()的執行流程#這篇文件講過d.setCallback(this);d.setVisible(getVisibility() == VISIBLE, false);mButtonDrawable = d;setMinHeight(mButtonDrawable.getIntrinsicHeight());}refreshDrawableState(); }

最后調用了refreshDrawableState這個方法,這個執行過程我們也分析過,整個執行思路都是一樣,不過不同的是,里面的很多方法都被覆蓋了。

這里我們再來把整個思路走一走。

refreshDrawableState執行的還是View里面的這個方法,直接看源碼。

public void refreshDrawableState() {//首先把標志設置為PFLAG_DRAWABLE_STATE_DIRTYmPrivateFlags |= PFLAG_DRAWABLE_STATE_DIRTY;drawableStateChanged();ViewParent parent = mParent;if (parent != null) {parent.childDrawableStateChanged(this);} }

drawableStateChanged這個方法不在執行View里面的這個方法,因為CompoundButton里面有這個方法,我們看看CompoundButton的這個方法。

@Override protected void drawableStateChanged() {super.drawableStateChanged();if (mButtonDrawable != null) {int[] myDrawableState = getDrawableState();// Set the state of the DrawablemButtonDrawable.setState(myDrawableState);invalidate();} }

getDrawableState這個函數還是調用的View的這個函數。

public final int[] getDrawableState() {//PFLAG_DRAWABLE_STATE_DIRTY是前面refreshDrawableState設置的//如果mDrawableState不為空,并且不需要刷新狀態,則直接返回,否則重新進行獲取if ((mDrawableState != null) && ((mPrivateFlags & PFLAG_DRAWABLE_STATE_DIRTY) == 0)) {return mDrawableState;} else {//這里就是重新得到視圖狀態,并將其返回mDrawableState = onCreateDrawableState(0);//清除前面refreshDrawableState設置的標識mPrivateFlags &= ~PFLAG_DRAWABLE_STATE_DIRTY;return mDrawableState;} }

下面調用到了onCreateDrawableState這個方法,這個方法也不在是執行View里面的這個方法,因為CompoundButton里面也有這個方法。

@Override protected int[] onCreateDrawableState(int extraSpace) {final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);if (isChecked()) {mergeDrawableStates(drawableState, CHECKED_STATE_SET);}return drawableState; }

結合之前我們詳解refreshDrawableList()的執行流程的分析。這個方法就是在之前的基礎上加入了一個判斷,如果isChekced為真,就把我們自定義的這個狀態加進去,這樣當前狀態里面就有我們的自定義的狀態,后面在狀態二維數組中查詢的時候,就可以找到對應的drawable圖片進行設置了。

這個函數執行完了就會回到上面的getDrawableState函數,然后把當前的狀態返回到drawableStateChanged函數中,接著看里面的代碼。

接著執行mButtonDrawable.setState(myDrawableState),把得到的當前狀態數組設置進去。里面的執行過去前面詳解refreshDrawableList()的執行流程的分析也說過,是完全一樣的,我們就省略,不明白就再看看,最后會執行invalidateSelf函數。

這個函數就會得到前面我們設置的Callback回調,調用它的invalidateDrawable方法。

public void invalidateSelf() {final Callback callback = getCallback();if (callback != null) {callback.invalidateDrawable(this);} }

跟前面一樣,因為View實現了這個回調,所以它執行的是View里面的實現方法。在這個方法里面執行了invalidate函數,所以會執行onDraw方法.
在CompoundButton里面實現了這個方法,它不再直接執行View里面的這個方法了。

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 drawableHeight = buttonDrawable.getIntrinsicHeight();final int drawableWidth = buttonDrawable.getIntrinsicWidth();int top = 0;switch (verticalGravity) {case Gravity.BOTTOM:top = getHeight() - drawableHeight;break;case Gravity.CENTER_VERTICAL:top = (getHeight() - drawableHeight) / 2;break;}int bottom = top + drawableHeight;int left = isLayoutRtl() ? getWidth() - drawableWidth : 0;int right = isLayoutRtl() ? getWidth() : drawableWidth;buttonDrawable.setBounds(left, top, right, bottom);buttonDrawable.draw(canvas);} }

這樣這個圖片就繪制出來了,從btn_check里面我們可以看到最開始顯示的圖片是btn_check_off,當我們單擊這個CheckBox的時候,會執行performClick函數。

@Override public boolean performClick() {/** XXX: These are tiny, need some surrounding 'expanded touch area',* which will need to be implemented in Button if we only override* performClick()*//* When clicked, toggle the state */toggle();return super.performClick(); }

接著執行toggle函數。

public void toggle() {setChecked(!mChecked); }

這里面就把當前的狀態設置為與之前相反的狀態,剛開始為false,這個時候就為true.

接著我們看看setChecked函數。

public void setChecked(boolean checked) {if (mChecked != checked) {mChecked = checked;refreshDrawableState();notifyViewAccessibilityStateChangedIfNeeded(AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);// Avoid infinite recursions if setChecked() is called from a listenerif (mBroadcasting) {return;}mBroadcasting = true;if (mOnCheckedChangeListener != null) {mOnCheckedChangeListener.onCheckedChanged(this, mChecked);}if (mOnCheckedChangeWidgetListener != null) {mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);}mBroadcasting = false; } }

在這個里面又執行了refreshDrawableState函數,同樣把上面的refreshDrawableState過程又執行了一遍,執行在到onCreateDrawableState就不一樣了。
我們在來看看這個函數:

protected int[] onCreateDrawableState(int extraSpace) {final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);if (isChecked()) {mergeDrawableStates(drawableState, CHECKED_STATE_SET);}return drawableState; }

第一次執行的時候isChecked為false,自定義的這個狀態沒有合進去,這次就把自定義的這個狀態合進去,這樣就可以查詢到我們的狀態,所以就可以找到定義的drawable,所以圖片發生改變為btn_check_on。

最后把完整的CompoundButton源碼貼出來,可以對照上面將的,然后再根據前面講的詳解refreshDrawableList()的執行流程這個過程理解理解。

/** Copyright (C) 2007 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package android.widget;import com.android.internal.R;import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.view.Gravity; import android.view.ViewDebug; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo;/*** <p>* A button with two states, checked and unchecked. When the button is pressed* or clicked, the state changes automatically.* </p>** <p><strong>XML attributes</strong></p>* <p>* See {@link android.R.styleable#CompoundButton* CompoundButton Attributes}, {@link android.R.styleable#Button Button* Attributes}, {@link android.R.styleable#TextView TextView Attributes}, {@link* android.R.styleable#View View Attributes}* </p>*/ public abstract class CompoundButton extends Button implements Checkable {private boolean mChecked;private int mButtonResource;private boolean mBroadcasting;private Drawable mButtonDrawable;private OnCheckedChangeListener mOnCheckedChangeListener;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();}public void toggle() {setChecked(!mChecked);}@Overridepublic boolean performClick() {/** XXX: These are tiny, need some surrounding 'expanded touch area',* which will need to be implemented in Button if we only override* performClick()*//* When clicked, toggle the state */toggle();return super.performClick();}@ViewDebug.ExportedPropertypublic boolean isChecked() {return mChecked;}/*** <p>Changes the checked state of this button.</p>** @param checked true to check the button, false to uncheck it*/public void setChecked(boolean checked) {if (mChecked != checked) {mChecked = checked;refreshDrawableState();notifyViewAccessibilityStateChangedIfNeeded(AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);// Avoid infinite recursions if setChecked() is called from a listenerif (mBroadcasting) {return;}mBroadcasting = true;if (mOnCheckedChangeListener != null) {mOnCheckedChangeListener.onCheckedChanged(this, mChecked);}if (mOnCheckedChangeWidgetListener != null) {mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);}mBroadcasting = false; }}/*** Register a callback to be invoked when the checked state of this button* changes.** @param listener the callback to call on checked state change*/public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {mOnCheckedChangeListener = listener;}/*** Register a callback to be invoked when the checked state of this button* changes. This callback is used for internal purpose only.** @param listener the callback to call on checked state change* @hide*/void setOnCheckedChangeWidgetListener(OnCheckedChangeListener listener) {mOnCheckedChangeWidgetListener = listener;}/*** Interface definition for a callback to be invoked when the checked state* of a compound button changed.*/public static interface OnCheckedChangeListener {/*** Called when the checked state of a compound button has changed.** @param buttonView The compound button view whose state has changed.* @param isChecked The new checked state of buttonView.*/void onCheckedChanged(CompoundButton buttonView, boolean isChecked);}/*** Set the background to a given Drawable, identified by its resource id.** @param resid the resource id of the drawable to use as the background */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);}/*** Set the background to a given Drawable** @param d The Drawable to use as the background*/public void setButtonDrawable(Drawable d) {if (d != null) {if (mButtonDrawable != null) {mButtonDrawable.setCallback(null);unscheduleDrawable(mButtonDrawable);}d.setCallback(this);d.setVisible(getVisibility() == VISIBLE, false);mButtonDrawable = d;setMinHeight(mButtonDrawable.getIntrinsicHeight());}refreshDrawableState();}@Overridepublic void onInitializeAccessibilityEvent(AccessibilityEvent event) {super.onInitializeAccessibilityEvent(event);event.setClassName(CompoundButton.class.getName());event.setChecked(mChecked);}@Overridepublic void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {super.onInitializeAccessibilityNodeInfo(info);info.setClassName(CompoundButton.class.getName());info.setCheckable(true);info.setChecked(mChecked);}@Overridepublic int getCompoundPaddingLeft() {int padding = super.getCompoundPaddingLeft();if (!isLayoutRtl()) {final Drawable buttonDrawable = mButtonDrawable;if (buttonDrawable != null) {padding += buttonDrawable.getIntrinsicWidth();}}return padding;}@Overridepublic int getCompoundPaddingRight() {int padding = super.getCompoundPaddingRight();if (isLayoutRtl()) {final Drawable buttonDrawable = mButtonDrawable;if (buttonDrawable != null) {padding += buttonDrawable.getIntrinsicWidth();}}return padding;}/*** @hide*/@Overridepublic int getHorizontalOffsetForDrawables() {final Drawable buttonDrawable = mButtonDrawable;return (buttonDrawable != null) ? buttonDrawable.getIntrinsicWidth() : 0;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);final Drawable buttonDrawable = mButtonDrawable;if (buttonDrawable != null) {final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;final int drawableHeight = buttonDrawable.getIntrinsicHeight();final int drawableWidth = buttonDrawable.getIntrinsicWidth();int top = 0;switch (verticalGravity) {case Gravity.BOTTOM:top = getHeight() - drawableHeight;break;case Gravity.CENTER_VERTICAL:top = (getHeight() - drawableHeight) / 2;break;}int bottom = top + drawableHeight;int left = isLayoutRtl() ? getWidth() - drawableWidth : 0;int right = isLayoutRtl() ? getWidth() : drawableWidth;buttonDrawable.setBounds(left, top, right, bottom);buttonDrawable.draw(canvas);}}@Overrideprotected int[] onCreateDrawableState(int extraSpace) {final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);if (isChecked()) {mergeDrawableStates(drawableState, CHECKED_STATE_SET);}return drawableState;}@Overrideprotected void drawableStateChanged() {super.drawableStateChanged();if (mButtonDrawable != null) {int[] myDrawableState = getDrawableState();// Set the state of the DrawablemButtonDrawable.setState(myDrawableState);invalidate();}}@Overrideprotected boolean verifyDrawable(Drawable who) {return super.verifyDrawable(who) || who == mButtonDrawable;}@Overridepublic void jumpDrawablesToCurrentState() {super.jumpDrawablesToCurrentState();if (mButtonDrawable != null) mButtonDrawable.jumpToCurrentState();}static class SavedState extends BaseSavedState {boolean checked;/*** Constructor called from {@link CompoundButton#onSaveInstanceState()}*/SavedState(Parcelable superState) {super(superState);}/*** Constructor called from {@link #CREATOR}*/private SavedState(Parcel in) {super(in);checked = (Boolean)in.readValue(null);}@Overridepublic void writeToParcel(Parcel out, int flags) {super.writeToParcel(out, flags);out.writeValue(checked);}@Overridepublic 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];}};}@Overridepublic Parcelable onSaveInstanceState() {// Force our ancestor class to save its statesetFreezesText(true);Parcelable superState = super.onSaveInstanceState();SavedState ss = new SavedState(superState);ss.checked = isChecked();return ss;}@Overridepublic void onRestoreInstanceState(Parcelable state) {SavedState ss = (SavedState) state;super.onRestoreInstanceState(ss.getSuperState());setChecked(ss.checked);requestLayout();} }

總結

以上是生活随笔為你收集整理的Android中CheckBox与CompoundButton源码解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

青草视频网 | 国产成人免费高清 | 成人在线视频免费 | 日韩有码中文字幕在线 | 在线观看日韩精品 | 91福利社区在线观看 | 五月婷综合 | 欧美黄污视频 | 在线观看av免费 | www.亚洲精品视频 | 欧美aaa大片| 欧美日韩中文字幕在线视频 | 亚洲一区二区三区毛片 | 亚洲国产资源 | 中日韩在线视频 | 日日夜夜精品免费 | 日本中文字幕在线看 | 精品不卡av | av免费网| 亚洲最新av网址 | 免费视频 三区 | 国内精品久久久久久中文字幕 | 成年人看片网站 | 波多野结衣视频网址 | 色欧美88888久久久久久影院 | 综合国产在线观看 | 久久久五月婷婷 | 午夜 久久 tv| 免费av网站观看 | 日本在线观看视频一区 | av福利第一导航 | 亚洲欧洲国产精品 | 日本黄网站 | 久久综合精品一区 | 中文字幕在线观看视频网站 | 国精产品999国精产 久久久久 | 国产一级在线观看视频 | 亚洲综合婷婷 | 国产中文字幕视频在线 | 国产精品 日韩 | 日韩小视频网站 | av电影在线播放 | 97超碰国产精品女人人人爽 | 欧美一级免费片 | 久久精品波多野结衣 | 国产中文 | 99精品热视频 | 蜜臀久久99静品久久久久久 | 福利av影院| 久久艹在线观看 | 国产精品久久久久久久毛片 | 国产精品 日韩 | 成年性视频 | 国产午夜一区 | 中文字幕日韩在线播放 | 99久久日韩精品免费热麻豆美女 | 亚洲精品在线观看的 | 国产精品毛片一区二区在线看 | 日本午夜在线亚洲.国产 | 国产精品男女啪啪 | 欧美伦理一区 | 日韩高清不卡在线 | 国产成人福利在线 | 精品一区二区三区在线播放 | 麻豆超碰| 99久久精品国产一区 | 国产成人一区二区三区在线观看 | 91在线看| 在线www色 | 成人午夜剧场在线观看 | 久久久www免费电影网 | 国产最新精品视频 | 国产精品黄 | 久久网页 | 久久精品一区二区三 | 色激情五月 | 天天色图| 美女视频a美女大全免费下载蜜臀 | www.夜夜| 成年人电影毛片 | 日本大片免费观看在线 | 国产精品色 | 91热这里只有精品 | 婷婷综合久久 | 国产69久久精品成人看 | 久久伦理影院 | 国产99久久久久久免费看 | 欧美日韩国产精品一区二区三区 | a'aaa级片在线观看 | 国产伦理久久 | 婷婷综合视频 | 国产午夜精品久久久久久久久久 | 久久综合久久久久88 | 91亚色视频在线观看 | 久久欧洲视频 | 91视频久久久久 | 丝袜制服天堂 | 中文字幕在线免费 | 免费美女av| 99热亚洲精品 | 99精品在线视频播放 | 国产精品99久久久精品免费观看 | 91三级视频 | 黄色成人影院 | 草久电影 | 午夜国产成人 | 91福利视频在线 | 91看片麻豆 | 日韩一级黄色大片 | 91视频-88av | 国语精品免费视频 | 国产一区二区在线视频观看 | 成人国产在线 | 欧美激情在线网站 | www.久久精品视频 | 超碰人人草人人 | 毛片随便看 | 精品国内自产拍在线观看视频 | 在线激情小视频 | 午夜久久网站 | 中文字幕在线播放日韩 | 日韩久久久久久久久 | 黄色大片视频网站 | 久久伦理电影网 | 91在线观看欧美日韩 | 久久成人国产精品一区二区 | 成人免费视频免费观看 | 在线你懂| 国产亚洲精品久 | 欧美精品国产综合久久 | 在线播放国产精品 | 亚洲va欧美va人人爽春色影视 | 手机av片 | 在线观看国产高清视频 | 午夜黄色| 国产成人三级一区二区在线观看一 | 国产午夜亚洲精品 | 欧美国产日韩一区二区三区 | 蜜臀久久99精品久久久无需会员 | 一区电影 | 久久一久久 | 成人av在线网址 | 久久久亚洲精品 | 黄av资源 | 精品国产激情 | 国产亚洲精品日韩在线tv黄 | 久久国产一区二区 | 久久黄色影院 | 在线观看av不卡 | 一区二区不卡高清 | 在线免费观看黄色小说 | 午夜免费在线观看 | 国产精品一区二区三区电影 | 亚洲久久视频 | 欧美日韩国产亚洲乱码字幕 | 天天激情在线 | 福利一区在线视频 | 国产精品色婷婷视频 | 最新国产在线视频 | 99国内精品久久久久久久 | 欧美日韩久久久 | 久久久精品国产一区二区电影四季 | 天天射天天舔天天干 | 午夜丁香视频在线观看 | 99精品视频在线观看播放 | 黄色av免费 | 国产精品va在线观看入 | 午夜99| 国产精品igao视频网网址 | 久久av黄色 | 亚洲天堂网在线视频观看 | 日韩精品久久一区二区 | 91av短视频 | 手机在线中文字幕 | 91精品一区国产高清在线gif | 国产精品毛片久久久久久 | 激情网站免费观看 | 18av在线视频| 黄色片网站大全 | 欧美精品一区二区在线播放 | 日本黄色免费播放 | 永久免费精品视频 | 一区在线免费观看 | 亚洲国产wwwccc36天堂 | 九九热精品国产 | 亚洲精品白浆高清久久久久久 | 欧美爽爽爽 | 亚洲精品动漫久久久久 | 欧美一级免费高清 | 91人人澡人人爽 | 三级在线国产 | 国内精品免费久久影院 | 日本3级在线观看 | 日韩 精品 一区 国产 麻豆 | 一级理论片在线观看 | 免费十分钟 | 色视频网站免费观看 | 99在线热播精品免费 | 中文字幕.av.在线 | 亚洲精品综合一二三区在线观看 | 911av视频| 久久网站免费 | 亚洲国产午夜视频 | 狠狠干夜夜操 | 丁香六月天婷婷 | 在线观看视频中文字幕 | 中文字幕在线看视频国产 | 九九九九免费视频 | 久av电影 | 日韩欧美中文 | 日韩激情久久 | 少妇精品久久久一区二区免费 | 五月色婷| 香蕉免费| 一区二区三区高清在线 | 精品自拍sae8—视频 | 韩国一区二区在线观看 | 黄色影院在线播放 | 亚洲jizzjizz日本少妇 | 伊人天天操 | 国产精品丝袜在线 | 亚洲免费公开视频 | 嫩模bbw搡bbbb搡bbbb| 成人午夜毛片 | 91麻豆国产福利在线观看 | 精品9999 | 国产一区国产精品 | 能在线看的av | 在线观看中文字幕一区二区 | 国产一区二区三区在线 | 国产精品一区二区av日韩在线 | 九九热在线播放 | www中文在线| 国产成年人av | 免费网站黄| 日韩久久视频 | 免费在线国产视频 | 久久视频免费看 | 成人九九视频 | 中文字幕精品视频 | 天天做日日做天天爽视频免费 | 婷婷看片| 国产精品一区二区三区视频免费 | 婷婷丁香激情五月 | 日韩中文字幕免费视频 | 91麻豆精品国产午夜天堂 | 蜜臀精品久久久久久蜜臀 | 免费日韩一级片 | 97视频总站| 久久久久久国产精品免费 | 黄色a视频| 国产日韩欧美在线观看 | 午夜aaaa | 国产精品自在欧美一区 | 国产一区二区电影在线观看 | 国产精品毛片久久蜜 | 国产免费三级在线观看 | 不卡视频国产 | 国产视频在线观看一区 | av在线官网 | 欧美有色 | 久久艹综合| 欧美一级片免费播放 | 91精品国自产在线偷拍蜜桃 | 国产亚洲在线视频 | 国产成人精品综合久久久久99 | 精品久久久久久电影 | 97福利在线观看 | 国产视频精品免费播放 | 国产在线观看a | 黄色免费观看视频 | 在线观看亚洲视频 | 日本精品久久久久中文字幕 | 天天干,天天操,天天射 | 天天草天天色 | 探花系列在线 | 亚洲a成人v| 在线三级av| 国产一区二区视频在线 | 国产一区二区在线播放视频 | 亚洲精品视频免费在线观看 | 精品亚洲欧美无人区乱码 | 999亚洲国产996395 | 999久久国产精品免费观看网站 | 中文字幕在线播放日韩 | 久久久久亚洲精品中文字幕 | 天天操天天操天天 | 一 级 黄 色 片免费看的 | 国产精品99在线播放 | 国产在线国偷精品产拍免费yy | 外国av网| 在线亚洲欧美日韩 | 男女啪啪网站 | 国内精品久久久久国产 | 国产精彩视频一区二区 | 在线观看亚洲免费视频 | 天天玩天天操天天射 | 中文字幕亚洲国产 | 四虎国产精 | 99精品一级欧美片免费播放 | 亚洲中字幕 | 日本中文字幕久久 | 久久99国产精品久久99 | 免费视频三区 | 97超碰人人看 | 国产精品第 | 国产在线观看一区 | 国产亚洲精品美女 | 久久狠狠一本精品综合网 | 一区二区视频免费在线观看 | 久久久精品一区二区 | 久久免费av电影 | 黄色特级片 | 97超碰免费| 黄色网址a | 久久精品伊人 | 国产精品综合在线观看 | 五月激情姐姐 | 国产中文字幕视频在线 | av大片网址 | 免费婷婷 | www在线观看视频 | 黄色字幕网 | 99久久精品国产一区二区三区 | 黄色一级在线观看 | 热久久精品在线 | 在线视频18在线视频4k | 欧美日韩国内在线 | 97国产在线 | 婷婷色五 | 国产片免费在线观看视频 | x99av成人免费| 天天操天天干天天插 | 国产精品18videosex性欧美 | 干综合网 | 婷婷视频在线 | 久久一级电影 | 中国一区二区视频 | 亚洲精品在线免费看 | 人人超碰人人 | 久草国产视频 | 欧美性脚交 | 亚洲色影爱久久精品 | 婷婷综合五月天 | 99精品国产福利在线观看免费 | 中文在线a√在线 | 天天操比 | 亚洲国产日韩精品 | 国产精品久久久久久久久久久久冷 | 婷婷视频在线观看 | 国产在线最新 | 日本中文字幕在线一区 | 日本黄色大片免费 | 丁香婷婷综合激情五月色 | 99久久网站| 欧美久久久久久久 | 亚洲黄色免费在线看 | 视频国产| 欧美日韩一区二区三区免费视频 | 国产精品一区二区62 | 亚洲精品美女在线 | 激情欧美一区二区免费视频 | 丁香九月婷婷 | 一色屋精品视频在线观看 | a色视频 | www夜夜操 | 丁香六月网 | 亚洲在线视频免费观看 | 国产高清视频在线观看 | 久久免费国产 | 国产免费久久久久 | 成人欧美亚洲 | 91精品国产91p65 | 日韩电影在线观看中文字幕 | 国产美女视频网站 | 欧美激情操 | 在线视频观看成人 | 亚洲夜夜网 | 在线看国产一区 | 干干操操| 久草免费电影 | 免费在线观看成人小视频 | 婷婷亚洲综合五月天小说 | 激情网婷婷 | 深爱五月激情网 | 91网免费看 | 91亚洲精品乱码久久久久久蜜桃 | www色,com| 成人av一区二区三区 | 在线a视频免费观看 | 精品久久1 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 免费久久99精品国产婷婷六月 | 国产精品破处视频 | 日韩乱理 | 国产无吗一区二区三区在线欢 | 在线免费av观看 | 久久人人爽人人爽人人片av软件 | 手机av永久免费 | 99在线精品视频 | 久久中文字幕视频 | 欧美成年网站 | 亚洲国产一区二区精品专区 | 六月色婷 | 日韩精品久久久久久久电影99爱 | 精品中文字幕视频 | 国产一在线精品一区在线观看 | 色先锋资源网 | 国产在线观看一区 | 97小视频| 丁香午夜 | 日日夜夜免费精品视频 | 国产精品自产拍在线观看桃花 | 国产一级免费在线 | 国产精品手机在线观看 | 国产精品女教师 | 久久国产精品99久久久久久丝袜 | 久久人人爽爽人人爽人人片av | 国产一级高清视频 | 亚洲在线精品 | a视频在线观看免费 | 色在线国产 | 色婷婷综合久久久 | 中文字幕有码在线播放 | 人人添人人澡人人澡人人人爽 | 91视频传媒| 看黄色.com | 激情久久五月天 | 成人av.com| 亚洲 欧美 另类人妖 | 国产一区二区久久久 | 日韩欧美视频在线播放 | 99久久夜色精品国产亚洲 | 国产 字幕 制服 中文 在线 | 在线观看一区视频 | 欧美日韩精 | 深夜男人影院 | 99热99热 | 久久综合日 | 亚洲爱av | 91看片在线观看 | 亚州精品国产 | 99久久精品国产免费看不卡 | 亚洲精品视频在线观看免费视频 | 久久情网 | 九九九免费视频 | 能在线观看的日韩av | 在线免费观看黄色小说 | 国产精品麻豆99久久久久久 | 免费日韩电影 | 欧美精品三级在线观看 | 国产精品一区久久久久 | 丁香久久激情 | 国产一级免费电影 | 久久久久99精品成人片三人毛片 | 国产精品不卡在线播放 | 特级西西444www大胆高清无视频 | 91精品蜜桃 | 97超碰在线视| 三级黄色理论片 | 久久久黄色| 四虎天堂 | 国产精品欧美激情在线观看 | 久久婷综合 | 黄色毛片一级片 | 国产一区二区三区网站 | 夜夜爽88888免费视频4848 | 天天干 天天摸 天天操 | 中文字幕刺激在线 | 国产精品黄色av | 91在线色| 日韩在线电影 | 亚洲精品啊啊啊 | 在线免费色视频 | 美女久久久 | av 在线观看 | 色噜噜狠狠色综合中国 | 久久免费观看视频 | 免费观看版 | 久久你懂的 | 日韩欧美一区二区三区视频 | 亚洲精品视频观看 | 日韩精品久久久久久久电影99爱 | 黄色毛片网站在线观看 | 蜜桃视频成人在线观看 | 国产色综合天天综合网 | 久久精品视频日本 | www.超碰 | 999免费视频| 天天色天天骑天天射 | 毛片一区二区 | 国产精品久久久久久电影 | 成人欧美一区二区三区黑人麻豆 | 国产视频精品免费 | 91麻豆精品国产午夜天堂 | 奇米777777| 国产小视频免费在线观看 | 岛国av在线| 成人动漫一区二区三区 | 久草在线一免费新视频 | 欧美日韩在线视频一区二区 | 国产成人免费观看久久久 | 国产99久久九九精品免费 | 麻豆精品传媒视频 | 欧美伦理一区 | 日韩理论片 | 久草爱视频 | 久久精品国产一区二区三区 | 一区二区三区日韩视频在线观看 | 国产精品久久久久久久久久白浆 | 日韩久久久久久久久久久久 | 午夜国产一区二区三区四区 | 国产精品99久久久久久久久 | 综合色中文 | 91高清免费在线观看 | 国产精久久久 | 成人av在线电影 | 日批视频在线播放 | 久久好看免费视频 | 中文字幕亚洲国产 | www.com.日本一级 | 手机成人av在线 | 99精品国产兔费观看久久99 | 激情久久综合 | 日韩sese| 精品国产一区在线观看 | 欧美日韩一级久久久久久免费看 | 成年人在线 | 狠狠操狠狠干天天操 | 最近2019好看的中文字幕免费 | 四虎永久网站 | 日本电影久久 | 久久综合影院 | 综合色伊人 | 久久国产成人午夜av影院潦草 | 成人99免费视频 | 日韩手机在线观看 | 中文字幕 欧美性 | 黄色小说视频网站 | 一区二区视频在线播放 | 日韩艹| 成人高清在线观看 | 久草在线免费新视频 | 97网站| 亚洲三级在线免费观看 | 波多野结衣电影一区二区三区 | 精品99久久 | 婷婷亚洲最大 | 丁香国产视频 | 精品美女国产在线 | 国产一区二区日本 | 国产又粗又猛又色又黄网站 | 久久久综合色 | 久久综合电影 | 五月天天天操 | 中文字幕在线资源 | 成人av.com| 成人av电影免费在线观看 | 青青久视频 | 500部大龄熟乱视频使用方法 | 天天操天天干天天插 | 色六月婷婷 | 免费观看黄色av | 国产日韩中文字幕 | 欧美一区二区在线 | 国产在线精 | 色a资源在线 | 国产在线国偷精品产拍 | 欧洲精品在线视频 | 99在线视频精品 | 精品国产一区二区三区免费 | 手机在线看a | 中文字幕在线观看完整版电影 | 99综合影院在线 | 97精品国产97久久久久久粉红 | 欧美日韩国产精品一区 | 久久男人免费视频 | 99久久久国产精品免费99 | 久久99久久精品 | 国产成人一区二区三区免费看 | 91污视频在线观看 | 国产亚洲精品久久久久久移动网络 | 成人久久毛片 | 天天躁日日躁狠狠躁av中文 | 美女久久 | 久久精品视频国产 | 国产精品中文字幕在线 | 丁香婷婷综合激情五月色 | 91免费看黄色 | 探花视频免费在线观看 | 在线不卡中文字幕播放 | 成年人在线看视频 | 日韩精品免费在线观看视频 | 亚洲国产视频a | 99免费看片| 亚洲最大成人网4388xx | 九九九热精品 | 婷婷精品国产欧美精品亚洲人人爽 | 久久国产精彩视频 | 操操操人人人 | 久久久网页 | 日本久久电影 | 友田真希av | 日日日干| 日韩av片无码一区二区不卡电影 | 97超碰人人爱 | 久久69精品久久久久久久电影好 | 涩涩伊人 | 国产精品一区二区精品视频免费看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产区免费 | 国产日本在线观看 | 亚洲精品资源在线 | 亚洲伊人成综合网 | 国产精品美女久久久久aⅴ 干干夜夜 | 成人免费一区二区三区在线观看 | 日韩久久久久久久久久久久 | 看片在线亚洲 | 国产精品对白一区二区三区 | 欧美一二在线 | 麻豆传媒视频在线播放 | 欧美日韩亚洲在线 | 波多野结衣电影一区二区 | 午夜精品一区二区三区在线播放 | 成人影片在线播放 | 日韩大片免费在线观看 | 456成人精品影院 | 中文字幕超清在线免费 | 成年美女黄网站色大片免费看 | 久久免费国产精品1 | 91麻豆精品国产自产在线游戏 | 干综合网 | 91精品少妇偷拍99 | 免费毛片一区二区三区久久久 | 91最新网址在线观看 | 日韩一区在线免费观看 | 久久色网站 | 国产黄免费在线观看 | 国产精品k频道 | 2024国产在线 | 91看片在线 | 狠狠的操狠狠的干 | wwwwww国产| av在线播放快速免费阴 | 在线观看精品一区 | 欧美日韩一区二区三区在线免费观看 | 欧美人交a欧美精品 | 在线播放精品一区二区三区 | 在线视频免费观看 | 色天天综合网 | 天天色天天综合网 | 黄色成人免费电影 | 国产91丝袜在线播放动漫 | 视频福利在线 | 中文字幕免费国产精品 | 成人黄色小说视频 | 欧美一进一出抽搐大尺度视频 | 国产精品久久一区二区三区, | 韩国av免费观看 | 中文免费在线观看 | 狠狠干夜夜爱 | 亚洲欧洲精品久久 | 日韩在线中文字幕视频 | 国产成人久久久久 | 99视频精品免费视频 | 欧美亚洲专区 | 伊人小视频 | 亚洲精品欧美精品 | 九九免费在线观看视频 | 91免费观看| 99国产一区二区三精品乱码 | 激情www | www.com久久| 超碰在线最新地址 | www.夜夜夜 | 中午字幕在线 | 国产亚洲91 | 国产日韩精品一区二区 | 亚洲成a人片在线www | 久久久 激情 | 97在线成人 | 久久在线免费 | 欧美福利片在线观看 | 高清国产午夜精品久久久久久 | 深夜免费福利 | 亚洲人成免费网站 | 欧美一二三视频 | 黄色毛片网站在线观看 | 成人在线电影观看 | 正在播放 久久 | 国产精品视频全国免费观看 | 精品免费 | 精品国产欧美一区二区三区不卡 | 免费精品视频在线 | 在线播放一区 | 亚洲第一av在线播放 | 亚洲少妇天堂 | 91在线观看欧美日韩 | 91网页版免费观看 | 久久人人做| 日韩久久久久久久久久 | 欧美韩国在线 | 国产成人精品电影久久久 | 国产日韩在线看 | 欧美一区二区三区在线播放 | 日韩色高清 | 亚洲免费成人 | 视频一区二区三区视频 | 好看的国产精品视频 | 亚洲精品免费在线播放 | 亚洲精品午夜国产va久久成人 | 911免费视频 | 国产成人精品久久久 | 欧美日韩aa| 在线看成人片 | 国产永久免费高清在线观看视频 | 亚洲精品影院在线观看 | 欧美色插 | 夜夜操狠狠干 | 久久久久久久久久国产精品 | 亚洲国产三级在线观看 | 国产精品女人网站 | 亚洲理论影院 | 久久在线影院 | 伊人超碰在线 | www.天天操| 一本一道波多野毛片中文在线 | 亚洲2019精品| 国产理论免费 | 午夜电影av | 国产99色| 456免费视频| 四虎影视国产精品免费久久 | 久草视频中文在线 | 成人黄在线| 久久久久久免费毛片精品 | 国产伦理一区二区三区 | 国产黄色在线看 | 日韩午夜在线播放 | 久久久久国产成人精品亚洲午夜 | 成人免费在线观看av | 国产精品地址 | 国产精品久99 | 91福利视频免费 | 97av影院| 俺要去色综合狠狠 | 日韩高清dvd | 8090yy亚洲精品久久 | 国产视频一二区 | 五月综合网站 | 欧美一二区视频 | 一级淫片在线观看 | 亚洲影院一区 | 久久久亚洲精品 | 欧美精品视 | 国产不卡免费视频 | 久久香蕉国产精品麻豆粉嫩av | 日韩mv欧美mv国产精品 | 久亚洲| 日日干夜夜骑 | 看片一区二区三区 | 国产中文在线播放 | 超碰97在线人人 | 欧美一级日韩三级 | 97电影院在线观看 | 日韩综合色 | 久久伦理影院 | 日韩亚洲在线观看 | 99久久日韩精品免费热麻豆美女 | 伊人资源视频在线 | av青草 | 97超碰人人澡人人 | 精品久久一区二区三区 | 丝袜美腿亚洲 | 国产精品毛片久久久久久久久久99999999 | 黄色片视频在线观看 | 在线免费观看视频一区二区三区 | 亚洲丁香日韩 | 91黄色小视频 | 国产精品成人品 | 日韩免费不卡视频 | 色99导航 | 欧美日韩国产一区 | 在线午夜 | 又黄又刺激的视频 | 天天干天天做 | 欧美精品v国产精品v日韩精品 | www.夜夜夜 | 国产精品国产三级国产 | www.综合网.com | 欧美精品中文在线免费观看 | 精品在线播放 | 黄色影院在线免费观看 | 首页中文字幕 | 国产精品视屏 | 久久久官网 | 国产蜜臀av | 免费看黄色毛片 | 久久国产一区二区三区 | 日本资源中文字幕在线 | 免费视频在线观看网站 | 色在线网 | 手机在线永久免费观看av片 | 在线播放日韩av | 天天夜夜操 | 亚洲精品女人 | 日韩欧美视频在线 | 国色综合 | 成年人免费在线播放 | 国产一区二区三区免费视频 | 久久综合久久八八 | 一区二区中文字幕在线 | 国产 成人 久久 | 日韩精品欧美视频 | 开心激情网五月天 | 人人澡人人澡人人 | 成人国产精品久久久 | 久久久久久精 | 又色又爽又激情的59视频 | 国产亚洲精品久久久久秋 | 在线国产精品视频 | www.夜夜操.com | 欧美性生爱 | 久久久久久久久毛片 | 亚洲动漫在线观看 | 国产综合在线观看视频 | 6080yy精品一区二区三区 | 成人av一二三区 | 国产精品igao视频网网址 | 久久久久久久久久久久久影院 | 精品一区二区免费视频 | 久久艹在线观看 | 久久a v视频 | 欧美日韩精品综合 | 久久久久亚洲国产精品 | 免费观看www小视频的软件 | 免费黄在线观看 | 精品99免费 | 日本成人免费在线观看 | 国产小视频在线免费观看视频 | 久久精品美女视频网站 | 欧美了一区在线观看 | 久久综合操 | 欧美极度另类性三渗透 | 欧美一区二区三区在线视频观看 | 免费h精品视频在线播放 | 99色在线观看视频 | 久久精品亚洲一区二区三区观看模式 | 综合婷婷 | 99精品国产一区二区 | 日本三级吹潮在线 | www.久久爱.cn | 中文字幕黄色 | 999色视频| 干综合网 | 精品久久久免费视频 | 伊人官网| av成人亚洲 | 91精品久久久久久久久久久久久 | 国产成人精品一区二区三区福利 | 91精品国产三级a在线观看 | 91在线文字幕 | 在线免费观看av网站 | 久久精品观看 | 日日综合| 日韩成人精品一区二区三区 | 亚洲mv大片欧洲mv大片免费 | 99精品一区| 免费看的av片 | 亚洲日本va在线观看 | 91九色视频观看 | 天天玩天天干 | 国产亚洲成人网 | 欧美精品久久久久 | 免费在线激情电影 | 亚洲精品国产精品久久99热 | 二区精品视频 | 日韩欧美国产视频 | 午夜精品一区二区三区在线视频 | 狠狠色伊人亚洲综合成人 | 国产视频久久久 | 欧美一区成人 | 欧美激情另类文学 | 国产资源中文字幕 | 天天艹天天干天天 | 久久久在线视频 | 亚洲精品白浆高清久久久久久 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 亚洲成av人片在线观看www | 久草影视在线 | 亚洲国内精品视频 | 麻豆传媒在线免费看 | 国产精品久久久久久久久蜜臀 | 久热av在线| 人人操日日干 | 亚一亚二国产专区 | 久久精品99国产精品酒店日本 | 天天操狠狠操网站 | 少妇bbb搡bbbb搡bbbb | 一区二区三区精品久久久 | 久久人人添人人爽添人人88v | 91在线一区二区 | 在线观看日韩 | 日日干天天插 | 毛片精品免费在线观看 | 天天操天天干天天玩 | 久久久久网址 | 中文字幕高清av | 一区二区三区免费看 | 久草在线播放视频 | 中文字幕一区二区三区乱码不卡 | 香蕉网在线播放 | 在线观看免费观看在线91 | 丁香六月综合网 | 在线观看蜜桃视频 | 精品免费国产一区二区三区四区 | 久久久久久国产一区二区三区 | 成人黄色中文字幕 | 激情视频区 | 亚洲精品美女久久久久 | 国产免费不卡av | 日本精品中文字幕在线观看 | 亚洲jizzjizz日本少妇 | 日产乱码一二三区别在线 | 久久国产精品免费视频 | 在线播放日韩av | 五月天婷婷在线播放 | 国产色拍拍拍拍在线精品 | 97在线看片| 色视频网页| 久99久视频 | 最近高清中文在线字幕在线观看 | 欧美日韩性 | 91在线免费公开视频 | 99精品亚洲 | 成年人免费在线观看网站 | 99精品在线免费视频 | 午夜骚影 | 精品免费久久久久久 | 天天干国产 | 亚洲国产精品成人综合 | 中文字幕日韩无 | 成人午夜电影网 | 亚洲国产理论片 | 91麻豆网 | 亚洲国产视频网站 | 久久精品国产一区二区电影 | 亚洲精品啊啊啊 | 国产午夜免费视频 | 亚洲五月六月 | 亚洲综合精品在线 | 五月开心综合 | 欧美性爽爽 | 麻豆久久 | 亚洲综合网站在线观看 | 国产123av| 在线观看国产成人av片 | 欧美日韩另类在线 | 国产精品久久久久久久久免费 | 精品成人免费 | 久久艹精品 | 国产清纯在线 | 亚洲精品天天 | 成人黄色小视频 | 国产成人久久 | 免费av电影网站 | 亚洲精品久久久久久久不卡四虎 | 日韩在线视频线视频免费网站 | 日韩高清成人在线 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 91传媒在线观看 | 男女啪啪网站 | 精品国产欧美一区二区 | 狠狠色丁香婷婷综合欧美 | 9在线观看免费高清完整版在线观看明 | 亚洲国产网址 | av先锋中文字幕 | 国产精品久久久久久一二三四五 | 国产成人高清av | 狠狠狠色狠狠色综合 | 免费婷婷 | 国产日韩欧美视频 | 亚州av成人 | 免费看一级特黄a大片 | 欧美精品天堂 | 黄色大片免费播放 | 免费在线激情电影 | 午夜久久美女 | 一区二区不卡在线观看 | 中文字幕欧美日韩va免费视频 | 人人爽人人爽人人爽学生一级 | 91 在线视频 | 日本久久久精品视频 | 亚洲欧美国产精品久久久久 | 国产高清在线 | 免费在线成人av | 国产精品久久一 | 午夜性色|