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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从Github开源项目《云阅》所学到的知识

發布時間:2024/4/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从Github开源项目《云阅》所学到的知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

感謝開源,感謝大神,才讓我們這些菜鳥成長!

附上云閱開源項目地址:點我吧。

?

1.輪播圖的實現。

  現在的APP基本都會實現這個功能吧,然后一直都找不到好的第三方庫,能夠滿足各種需求。然而碰到了這個開源庫...

  • gradle配置:  implementation 'com.youth.banner:banner:1.4.9'
  • github地址:  https://github.com/youth5201314/banner
  • 參考文章:  Android-圖片輪播(banner)

?

?

2.MVVM-DataBinding架構開發。

  它本質上就是MVC、MVP的改進版。實現數據和視圖相互綁定。MVVM就是講其中的View的狀態和行為抽象化,讓我們將視圖UI和業務邏輯分開。

  • gradle配置:? ? (在module的build.gradle中的android模塊中加入如下代碼塊) 
dataBinding {enabled = true}
  • 官方地址:  https://developer.android.google.cn/topic/libraries/data-binding/index.html
  • 中文翻譯地址:? ? ??https://blog.csdn.net/jjwwmlp456/article/details/54915981
  • 參考文章:? ? ? ?https://www.jianshu.com/p/ba4982be30f8

?

?

3.解決Bug:Android點擊應用圖標后會重新進入啟動頁。

  • 問題描述:發現應用打包安裝后按home鍵切換到后臺后,點擊應用圖標又重新打開了一個,并沒有回到原來的界面。
  • 解決方案與參考文章:https://blog.csdn.net/jianiuqi/article/details/54091181

?

?

4.第三方庫Glide的簡單使用。

  • gradle配置:
implementation 'com.github.bumptech.glide:glide:4.7.1'
  • Glide參考文章:https://mrfu.me/2016/02/27/Glide_Getting_Started/
  • Glide的github地址:https://github.com/bumptech/glide
  • 處理圖片效果的Glide庫,如果選擇這個第三方庫,則無需添加glide,它里面自帶就有glide
implementation 'jp.wasabeef:glide-transformations:2.0.1
  • 處理圖片效果的github地址:https://github.com/wasabeef/picasso-transformations
  • 圖片處理參考文章:https://www.jianshu.com/p/976c86fa72bc

  

?

5.分包策略,解決65535方法限制的問題。

  • gradle配置:
implementation 'com.android.support:multidex:1.0.3'
  • 參考文章:https://blog.csdn.net/djy1992/article/details/51162013
  • 官網文檔:https://developer.android.com/tools/building/multidex.html#about

?

?

6.避免在1s中多次點擊按鈕。

  方法:自己新建一個抽象類,集成OnClickListener,重寫里面的onClick函數。

public abstract class PerfectClickListener implements OnClickListener {public static final int MIN_CLICK_DELAY_TIME = 1000;private long lastClickTime = 0;private int id = -1;@Overridepublic void onClick(View v) {long currentTime = Calendar.getInstance().getTimeInMillis();int mId = v.getId();if (id != mId) {id = mId;lastClickTime = currentTime;onNoDoubleClick(v);return;}if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {lastClickTime = currentTime;onNoDoubleClick(v);}}protected abstract void onNoDoubleClick(View v); } View Code

  使用場景:在啟動頁中,有一個跳轉按鈕,避免用戶多次點擊啟動多個主頁。

?

?

7.如何使用android.support.v7.widget.Toolbar

  • 首先一定要在build.gradle中添加依賴。
implementation "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"implementation "com.android.support:design:$rootProject.supportLibraryVersion"implementation "com.android.support:support-v4:$rootProject.supportLibraryVersion"implementation "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"

  這里使用了rootProject來間接設置,注意這個rootProject要在項目的build.gradle中具體配置。具體百度吧。

  • 然后再布局中這樣用。
<android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="@color/colorTheme"app:contentInsetStart="0.0dp"app:popupTheme="@style/ThemeOverlay.AppCompat.Light"app:theme="@style/ToolbarStyle">

  這里使用了自定義主題,在style文件中自己創建一個。

  • 對于popupTheme具體含義參考這篇文章:https://blog.csdn.net/lovexieyuan520/article/details/48931185
  • 具體使用方法參考這篇文章:https://blog.csdn.net/javazejian/article/details/50451853

?

?

?

8.設置主題點擊波紋效果。

  • 首先得引入谷歌的材料設計庫,上面第7點中有相關引入方式。
  • 然后再布局文件中:android:background="?attr/...."? ?(這里省略號寫一些波紋樣式即可)
  • 參考文章:https://yq.aliyun.com/articles/12407

?

?

9.左右滑動ViewPager時,沒獲取焦點沒響應。

  原來僅僅是在定義Viewpager的時候,添加如下代碼即可。

android:descendantFocusability="blocksDescendants"
  • 參考文章:https://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html
  • 參數意義:
    beforeDescendants:viewgroup會優先其子類控件而獲取到焦點afterDescendants:viewgroup只有當其子類控件不需要獲取焦點時才獲取焦點blocksDescendants:viewgroup會覆蓋子類控件而直接獲得焦點

?

?

10.設置狀態欄顏色以及其他方法。

  • 首先自定義一個視圖叫做StatusBarView。
public class StatusBarView extends View {public StatusBarView(Context context, AttributeSet attrs) {super(context, attrs);}public StatusBarView(Context context) {super(context);} }
  • 然后寫一個通用類,統一設置狀態欄的一些屬性。
public class StatusBarUtil {public static final int DEFAULT_STATUS_BAR_ALPHA = 112;/*** 設置狀態欄顏色** @param activity 需要設置的 activity* @param color 狀態欄顏色值*/public static void setColor(Activity activity, @ColorInt int color) {setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA);}/*** 設置狀態欄顏色** @param activity 需要設置的activity* @param color 狀態欄顏色值* @param statusBarAlpha 狀態欄透明度*/public static void setColor(Activity activity, @ColorInt int color, int statusBarAlpha) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();int count = decorView.getChildCount();if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));} else {StatusBarView statusView = createStatusBarView(activity, color, statusBarAlpha);decorView.addView(statusView);}setRootView(activity);}}/*** 設置狀態欄純色 不加半透明效果** @param activity 需要設置的 activity* @param color 狀態欄顏色值*/public static void setColorNoTranslucent(Activity activity, @ColorInt int color) {setColor(activity, color, 0);}/*** 設置狀態欄顏色(5.0以下無半透明效果,不建議使用)** @param activity 需要設置的 activity* @param color 狀態欄顏色值*/@Deprecatedpublic static void setColorDiff(Activity activity, @ColorInt int color) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return;}activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);// 生成一個狀態欄大小的矩形ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();int count = decorView.getChildCount();if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {decorView.getChildAt(count - 1).setBackgroundColor(color);} else {StatusBarView statusView = createStatusBarView(activity, color);decorView.addView(statusView);}setRootView(activity);}/*** 使狀態欄半透明* <p>* 適用于圖片作為背景的界面,此時需要圖片填充到狀態欄** @param activity 需要設置的activity*/public static void setTranslucent(Activity activity) {setTranslucent(activity, DEFAULT_STATUS_BAR_ALPHA);}/*** 使狀態欄半透明* <p>* 適用于圖片作為背景的界面,此時需要圖片填充到狀態欄** @param activity 需要設置的activity* @param statusBarAlpha 狀態欄透明度*/public static void setTranslucent(Activity activity, int statusBarAlpha) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return;}setTransparent(activity);addTranslucentView(activity, statusBarAlpha);}/*** 針對根布局是 CoordinatorLayout, 使狀態欄半透明* <p>* 適用于圖片作為背景的界面,此時需要圖片填充到狀態欄** @param activity 需要設置的activity* @param statusBarAlpha 狀態欄透明度*/public static void setTranslucentForCoordinatorLayout(Activity activity, int statusBarAlpha) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return;}transparentStatusBar(activity);addTranslucentView(activity, statusBarAlpha);}/*** 設置狀態欄全透明** @param activity 需要設置的activity*/public static void setTransparent(Activity activity) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return;}transparentStatusBar(activity);setRootView(activity);}/*** 使狀態欄透明(5.0以上半透明效果,不建議使用)* <p>* 適用于圖片作為背景的界面,此時需要圖片填充到狀態欄** @param activity 需要設置的activity*/@Deprecatedpublic static void setTranslucentDiff(Activity activity) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {// 設置狀態欄透明 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);setRootView(activity);}}/*** 為DrawerLayout 布局設置狀態欄變色** @param activity 需要設置的activity* @param drawerLayout DrawerLayout* @param color 狀態欄顏色值*/public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {setColorForDrawerLayout(activity, drawerLayout, color, DEFAULT_STATUS_BAR_ALPHA);}/*** 為DrawerLayout 布局設置狀態欄顏色,純色** @param activity 需要設置的activity* @param drawerLayout DrawerLayout* @param color 狀態欄顏色值*/public static void setColorNoTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {setColorForDrawerLayout(activity, drawerLayout, color, 0);}/*** 為DrawerLayout 布局設置狀態欄變色** @param activity 需要設置的activity* @param drawerLayout DrawerLayout* @param color 狀態欄顏色值* @param statusBarAlpha 狀態欄透明度*/public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, @ColorInt int color,int statusBarAlpha) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);activity.getWindow().setStatusBarColor(Color.TRANSPARENT);} else {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}// 生成一個狀態欄大小的矩形// 添加 statusBarView 到布局中ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);if (contentLayout.getChildCount() > 0 && contentLayout.getChildAt(0) instanceof StatusBarView) {contentLayout.getChildAt(0).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));} else {StatusBarView statusBarView = createStatusBarView(activity, color);contentLayout.addView(statusBarView, 0);}// 內容布局不是 LinearLayout 時,設置padding topif (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {contentLayout.getChildAt(1).setPadding(contentLayout.getPaddingLeft(), getStatusBarHeight(activity) + contentLayout.getPaddingTop(),contentLayout.getPaddingRight(), contentLayout.getPaddingBottom());}// 設置屬性ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);drawerLayout.setFitsSystemWindows(false);contentLayout.setFitsSystemWindows(false);contentLayout.setClipToPadding(true);drawer.setFitsSystemWindows(false);addTranslucentView(activity, statusBarAlpha);}/*** 為DrawerLayout 布局設置狀態欄變色(5.0以下無半透明效果,不建議使用)** @param activity 需要設置的activity* @param drawerLayout DrawerLayout* @param color 狀態欄顏色值*/@Deprecatedpublic static void setColorForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout, @ColorInt int color) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);// 生成一個狀態欄大小的矩形ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);if (contentLayout.getChildCount() > 0 && contentLayout.getChildAt(0) instanceof StatusBarView) {contentLayout.getChildAt(0).setBackgroundColor(calculateStatusColor(color, DEFAULT_STATUS_BAR_ALPHA));} else {// 添加 statusBarView 到布局中StatusBarView statusBarView = createStatusBarView(activity, color);contentLayout.addView(statusBarView, 0);}// 內容布局不是 LinearLayout 時,設置padding topif (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);}// 設置屬性ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);drawerLayout.setFitsSystemWindows(false);contentLayout.setFitsSystemWindows(false);contentLayout.setClipToPadding(true);drawer.setFitsSystemWindows(false);}}/*** 為 DrawerLayout 布局設置狀態欄透明** @param activity 需要設置的activity* @param drawerLayout DrawerLayout*/public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {setTranslucentForDrawerLayout(activity, drawerLayout, DEFAULT_STATUS_BAR_ALPHA);}/*** 為 DrawerLayout 布局設置狀態欄透明** @param activity 需要設置的activity* @param drawerLayout DrawerLayout*/public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, int statusBarAlpha) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return;}setTransparentForDrawerLayout(activity, drawerLayout);addTranslucentView(activity, statusBarAlpha);}/*** 為 DrawerLayout 布局設置狀態欄透明** @param activity 需要設置的activity* @param drawerLayout DrawerLayout*/public static void setTransparentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);activity.getWindow().setStatusBarColor(Color.TRANSPARENT);} else {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);// 內容布局不是 LinearLayout 時,設置padding topif (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);}// 設置屬性ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);drawerLayout.setFitsSystemWindows(false);contentLayout.setFitsSystemWindows(false);contentLayout.setClipToPadding(true);drawer.setFitsSystemWindows(false);}/*** 為 DrawerLayout 布局設置狀態欄透明(5.0以上半透明效果,不建議使用)** @param activity 需要設置的activity* @param drawerLayout DrawerLayout*/@Deprecatedpublic static void setTranslucentForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {// 設置狀態欄透明 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);// 設置內容布局屬性ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);contentLayout.setFitsSystemWindows(true);contentLayout.setClipToPadding(true);// 設置抽屜布局屬性ViewGroup vg = (ViewGroup) drawerLayout.getChildAt(1);vg.setFitsSystemWindows(false);// 設置 DrawerLayout 屬性drawerLayout.setFitsSystemWindows(false);}}/*** 為頭部是 ImageView 的界面設置狀態欄全透明** @param activity 需要設置的activity* @param needOffsetView 需要向下偏移的 View*/public static void setTransparentForImageView(Activity activity, View needOffsetView) {setTranslucentForImageView(activity, 0, needOffsetView);}/*** 為頭部是 ImageView 的界面設置狀態欄透明(使用默認透明度)** @param activity 需要設置的activity* @param needOffsetView 需要向下偏移的 View*/public static void setTranslucentForImageView(Activity activity, View needOffsetView) {setTranslucentForImageView(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);}/*** 為頭部是 ImageView 的界面設置狀態欄透明** @param activity 需要設置的activity* @param statusBarAlpha 狀態欄透明度* @param needOffsetView 需要向下偏移的 View*/public static void setTranslucentForImageView(Activity activity, int statusBarAlpha, View needOffsetView) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {return;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {activity.getWindow().setStatusBarColor(Color.TRANSPARENT);activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);if (activity instanceof TabActivity){activity.getWindow()//兼容TabActivity .setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}} else {activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}addTranslucentView(activity, statusBarAlpha);if (needOffsetView != null) {ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams();if (layoutParams != null) {layoutParams.setMargins(0, getStatusBarHeight(activity), 0, 0);}}}public static void setMargin(Activity activity, View needOffsetView) {if (needOffsetView != null) {ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) needOffsetView.getLayoutParams();if (layoutParams != null) {layoutParams.setMargins(0, getStatusBarHeight(activity), 0, 0);}}}/*** 為 fragment 頭部是 ImageView 的設置狀態欄透明** @param activity fragment 對應的 activity* @param needOffsetView 需要向下偏移的 View*/public static void setTranslucentForImageViewInFragment(Activity activity, View needOffsetView) {setTranslucentForImageViewInFragment(activity, DEFAULT_STATUS_BAR_ALPHA, needOffsetView);}/*** 為 fragment 頭部是 ImageView 的設置狀態欄透明** @param activity fragment 對應的 activity* @param needOffsetView 需要向下偏移的 View*/public static void setTransparentForImageViewInFragment(Activity activity, View needOffsetView) {setTranslucentForImageViewInFragment(activity, 0, needOffsetView);}/*** 為 fragment 頭部是 ImageView 的設置狀態欄透明** @param activity fragment 對應的 activity* @param statusBarAlpha 狀態欄透明度* @param needOffsetView 需要向下偏移的 View*/public static void setTranslucentForImageViewInFragment(Activity activity, int statusBarAlpha, View needOffsetView) {setTranslucentForImageView(activity, statusBarAlpha, needOffsetView);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {clearPreviousSetting(activity);}}@TargetApi(Build.VERSION_CODES.KITKAT)private static void clearPreviousSetting(Activity activity) {ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();int count = decorView.getChildCount();if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {decorView.removeViewAt(count - 1);ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);rootView.setPadding(0, 0, 0, 0);}}/*** 添加半透明矩形條** @param activity 需要設置的 activity* @param statusBarAlpha 透明值*/private static void addTranslucentView(Activity activity, int statusBarAlpha) {ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);if (contentView.getChildCount() > 1) {contentView.getChildAt(1).setBackgroundColor(Color.argb(statusBarAlpha, 0, 0, 0));} else {contentView.addView(createTranslucentStatusBarView(activity, statusBarAlpha));}}/*** 生成一個和狀態欄大小相同的彩色矩形條** @param activity 需要設置的 activity* @param color 狀態欄顏色值* @return 狀態欄矩形條*/private static StatusBarView createStatusBarView(Activity activity, @ColorInt int color) {// 繪制一個和狀態欄一樣高的矩形StatusBarView statusBarView = new StatusBarView(activity);LinearLayout.LayoutParams params =new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));statusBarView.setLayoutParams(params);statusBarView.setBackgroundColor(color);return statusBarView;}/*** 生成一個和狀態欄大小相同的半透明矩形條** @param activity 需要設置的activity* @param color 狀態欄顏色值* @param alpha 透明值* @return 狀態欄矩形條*/private static StatusBarView createStatusBarView(Activity activity, @ColorInt int color, int alpha) {// 繪制一個和狀態欄一樣高的矩形StatusBarView statusBarView = new StatusBarView(activity);LinearLayout.LayoutParams params =new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));statusBarView.setLayoutParams(params);statusBarView.setBackgroundColor(calculateStatusColor(color, alpha));return statusBarView;}/*** 設置根布局參數*/private static void setRootView(Activity activity) {ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);rootView.setFitsSystemWindows(true);rootView.setClipToPadding(true);}/*** 使狀態欄透明*/@TargetApi(Build.VERSION_CODES.KITKAT)private static void transparentStatusBar(Activity activity) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);activity.getWindow().setStatusBarColor(Color.TRANSPARENT);} else {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}}/*** 創建半透明矩形 View** @param alpha 透明值* @return 半透明 View*/private static StatusBarView createTranslucentStatusBarView(Activity activity, int alpha) {// 繪制一個和狀態欄一樣高的矩形StatusBarView statusBarView = new StatusBarView(activity);LinearLayout.LayoutParams params =new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));statusBarView.setLayoutParams(params);statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0));return statusBarView;}/*** 獲取狀態欄高度** @param context context* @return 狀態欄高度*/public static int getStatusBarHeight(Context context) {// 獲得狀態欄高度int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");return context.getResources().getDimensionPixelSize(resourceId);}/*** 計算狀態欄顏色** @param color color值* @param alpha alpha值* @return 最終的狀態欄顏色*/private static int calculateStatusColor(@ColorInt int color, int alpha) {float a = 1 - alpha / 255f;int red = color >> 16 & 0xff;int green = color >> 8 & 0xff;int blue = color & 0xff;red = (int) (red * a + 0.5);green = (int) (green * a + 0.5);blue = (int) (blue * a + 0.5);return 0xff << 24 | red << 16 | green << 8 | blue;}} View Code
  • 簡單用法:根據自己需求在需要的地方,StatusBarUtil.set相關的方法即可。

?

?

11.常見的item點擊的效果樣式文件。

  長按或者點擊一個TextView之后,背景顏色更改,一般都是初始為白色,長按后顯示灰色。顏色值也是很講究的。

  有點類似微信頁面每一個item點擊的效果,一直調不出那樣的效果。主要是找不到合適的顏色。

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_enabled="false"><shape><solid android:color="#F1F3F4" /></shape></item><item android:state_pressed="true"><shape><solid android:color="#d9d9d9" /></shape></item><item android:state_pressed="false"><shape><solid android:color="#F1F3F4" /></shape></item></selector>

?

?

?12.用SharePerferences文件來記錄全局配置。

  可以寫一個通用類,用來封裝不同數據類型寫入文件,從文件中獲取數據的方法。

public class SPUtils {private static final String CONFIG = "config";/*** 獲取SharedPreferences實例對象** @param fileName*/private static SharedPreferences getSharedPreference(String fileName) {return MyApplication.getInstance().getSharedPreferences(fileName, Context.MODE_PRIVATE);}/*** 保存一個String類型的值!*/public static void putString(String key, String value) {SharedPreferences.Editor editor = getSharedPreference(CONFIG).edit();editor.putString(key, value).apply();}/*** 獲取String的value*/public static String getString(String key, String defValue) {SharedPreferences sharedPreference = getSharedPreference(CONFIG);return sharedPreference.getString(key, defValue);}/*** 保存一個Boolean類型的值!*/public static void putBoolean(String key, Boolean value) {SharedPreferences.Editor editor = getSharedPreference(CONFIG).edit();editor.putBoolean(key, value).apply();}/*** 獲取boolean的value*/public static boolean getBoolean(String key, Boolean defValue) {SharedPreferences sharedPreference = getSharedPreference(CONFIG);return sharedPreference.getBoolean(key, defValue);}/*** 保存一個int類型的值!*/public static void putInt(String key, int value) {SharedPreferences.Editor editor = getSharedPreference(CONFIG).edit();editor.putInt(key, value).apply();}/*** 獲取int的value*/public static int getInt(String key, int defValue) {SharedPreferences sharedPreference = getSharedPreference(CONFIG);return sharedPreference.getInt(key, defValue);}/*** 保存一個float類型的值!*/public static void putFloat(String fileName, String key, float value) {SharedPreferences.Editor editor = getSharedPreference(fileName).edit();editor.putFloat(key, value).apply();}/*** 獲取float的value*/public static float getFloat(String key, Float defValue) {SharedPreferences sharedPreference = getSharedPreference(CONFIG);return sharedPreference.getFloat(key, defValue);}/*** 保存一個long類型的值!*/public static void putLong(String key, long value) {SharedPreferences.Editor editor = getSharedPreference(CONFIG).edit();editor.putLong(key, value).apply();}/*** 獲取long的value*/public static long getLong(String key, long defValue) {SharedPreferences sharedPreference = getSharedPreference(CONFIG);return sharedPreference.getLong(key, defValue);}/*** 取出List<String>** @param key List<String> 對應的key* @return List<String>*/public static List<String> getStrListValue(String key) {List<String> strList = new ArrayList<String>();int size = getInt(key + "size", 0);//Log.d("sp", "" + size);for (int i = 0; i < size; i++) {strList.add(getString(key + i, null));}return strList;}/*** 存儲List<String>* @param key List<String>對應的key* @param strList 對應需要存儲的List<String>*/public static void putStrListValue(String key, List<String> strList) {if (null == strList) {return;}// 保存之前先清理已經存在的數據,保證數據的唯一性 removeStrList(key);int size = strList.size();putInt(key + "size", size);for (int i = 0; i < size; i++) {putString(key + i, strList.get(i));}}/*** 清空List<String>所有數據** @param key List<String>對應的key*/public static void removeStrList(String key) {int size = getInt(key + "size", 0);if (0 == size) {return;}remove(key + "size");for (int i = 0; i < size; i++) {remove(key + i);}}/*** 清空對應key數據*/public static void remove(String key) {SharedPreferences.Editor editor = getSharedPreference(CONFIG).edit();editor.remove(key).apply();}} View Code

?  另外,可以根據自己的需求,靈活地在文件中增加一些具體的方法。比如存儲APP的夜間模式或者日間模式,是否登錄等。

?

?

13.利用Glide畫圓角圖。  

  • 首先在module的build.gradle中添加依賴,前面第4點有講過。
  • 然后再自定義一個轉換器,類似于下面這樣。
public class GlideCircleTransform extends BitmapTransformation {public GlideCircleTransform(Context context) {super(context);}@Overrideprotected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {return circleCrop(pool, toTransform);}private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {if (source == null) return null;int size = Math.min(source.getWidth(), source.getHeight());int x = (source.getWidth() - size) / 2;int y = (source.getHeight() - size) / 2;// TODO this could be acquired from the pool tooBitmap squared = Bitmap.createBitmap(source, x, y, size, size);Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);if (result == null) {result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);}Canvas canvas = new Canvas(result);Paint paint = new Paint();paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));paint.setAntiAlias(true);float r = size / 2f;canvas.drawCircle(r, r, r, paint);return result;}@Overridepublic String getId() {return getClass().getName();} } View Code
  • 然后就是Glide調用這個轉換器了,類似于下面這樣。
public static void displayCircle(ImageView imageView, String imageUrl) {Glide.with(imageView.getContext()).load(imageUrl).crossFade(500).error(R.drawable.ic_avatar_default).transform(new GlideCircleTransform(imageView.getContext())).into(imageView);}

?

?

?

14.學會添加library。

  這里添加library不是在build.gradle中添加依賴,也不是在工程中添加libs文件。而是導入一個Module。

  其實是一個主項目需要實現某些功能,然后將這部分功能劃分開來,最后將這部分功能集成到主項目中,也是是模塊的劃分,所以這里稱為module。

  這樣的好處是:可以再主module中任何地方引用子module的圖片資源,代碼資源等等。

  現在有一個地方不是特別理解,就是如何將多個library統一放在一個文件夾下面,這樣方便管理,不然都不知道哪個是主項目了。

  添加單個library參考文章:https://blog.csdn.net/u014772414/article/details/51194952

?

?

?

15.學會定義BaseFragment。

  主要抓住一下要點吧。

  • 如果網絡異常,則頁面應該怎么顯示。
  • 如果正在加載中,則頁面應該怎么顯示。
  • 如何動態添加自己想要的布局。

?  所以在布局方面我們可以這樣布局。

<RelativeLayoutandroid:id="@+id/container"android:layout_width="match_parent"android:layout_height="match_parent"><!--加載失敗--><LinearLayoutandroid:id="@+id/ll_error_refresh"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"android:visibility="gone"><ImageViewandroid:id="@+id/img_err"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/load_err" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:text="加載失敗,點擊重試"android:textSize="14sp" /></LinearLayout><!--加載中..--><LinearLayoutandroid:id="@+id/ll_progress_bar"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_marginTop="80dp"android:gravity="center_vertical"><ImageViewandroid:id="@+id/img_progress"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/yun_anim" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:text="努力加載中..."android:textColor="@color/colorTabText"android:textSize="14sp" /></LinearLayout></RelativeLayout> View Code

  然后再BaseFragment中,這樣決定怎么隱藏怎么顯示。

public abstract class BaseFragment<SV extends ViewDataBinding> extends Fragment {protected SV bindingView;//布局viewprotected boolean mIsVisible=false;//fragment是否顯示了private LinearLayout mLlProgressBar;//加載中private LinearLayout mRefresh;//加載失敗protected RelativeLayout mContainer;//內容布局private AnimationDrawable mAnimationDrawable;@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View ll = inflater.inflate(R.layout.fragment_base, null);bindingView = DataBindingUtil.inflate(getActivity().getLayoutInflater(),setContent(), null, false);RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);bindingView.getRoot().setLayoutParams(params);mContainer = ll.findViewById(R.id.container);mContainer.addView(bindingView.getRoot());//動態替換成自己想要的布局return ll;}@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);mLlProgressBar = getView(R.id.ll_progress_bar);ImageView img = getView(R.id.img_progress);// 加載動畫mAnimationDrawable = (AnimationDrawable) img.getDrawable();// 默認進入頁面就開啟動畫if (!mAnimationDrawable.isRunning()) {mAnimationDrawable.start();}mRefresh = getView(R.id.ll_error_refresh);// 點擊加載失敗布局mRefresh.setOnClickListener(new PerfectClickListener() {@Overrideprotected void onNoDoubleClick(View v) {showLoading();onRefresh();}});bindingView.getRoot().setVisibility(View.GONE);}protected <T extends View> T getView(int id) {return (T) getView().findViewById(id);}/*** 加載失敗后點擊后的操作*/protected void onRefresh() {}/*** 顯示加載中狀態*/protected void showLoading() {if (mLlProgressBar.getVisibility() != View.VISIBLE) {mLlProgressBar.setVisibility(View.VISIBLE);}// 開始動畫if (!mAnimationDrawable.isRunning()) {mAnimationDrawable.start();}if (bindingView.getRoot().getVisibility() != View.GONE) {bindingView.getRoot().setVisibility(View.GONE);}if (mRefresh.getVisibility() != View.GONE) {mRefresh.setVisibility(View.GONE);}}/*** 加載完成的狀態*/protected void showContentView() {if (mLlProgressBar.getVisibility() != View.GONE) {mLlProgressBar.setVisibility(View.GONE);}// 停止動畫if (mAnimationDrawable.isRunning()) {mAnimationDrawable.stop();}if (mRefresh.getVisibility() != View.GONE) {mRefresh.setVisibility(View.GONE);}if (bindingView.getRoot().getVisibility() != View.VISIBLE) {bindingView.getRoot().setVisibility(View.VISIBLE);}}/*** 加載失敗點擊重新加載的狀態*/protected void showError() {if (mLlProgressBar.getVisibility() != View.GONE) {mLlProgressBar.setVisibility(View.GONE);}// 停止動畫if (mAnimationDrawable.isRunning()) {mAnimationDrawable.stop();}if (mRefresh.getVisibility() != View.VISIBLE) {mRefresh.setVisibility(View.VISIBLE);}if (bindingView.getRoot().getVisibility() != View.GONE) {bindingView.getRoot().setVisibility(View.GONE);}}/*** 布局*/public abstract int setContent();/*** 在這里實現Fragment數據的緩加載.*/@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);if (getUserVisibleHint()) {mIsVisible = true;loadData();} else {mIsVisible = false;}}/*** 顯示時加載數據,需要這樣的使用* 注意聲明 isPrepared,先初始化* 生命周期會先執行 setUserVisibleHint 再執行onActivityCreated* 在 onActivityCreated 之后第一次顯示加載數據,只加載一次*/protected void loadData() {}@Overridepublic void onDestroy() {super.onDestroy();} } View Code

?

?

?

16.ViewModel使用方法。

  • 作用:為Activity或Fragment管理,請求數據,但是具體的邏輯不在ViewModel中寫。
  • 參考文章:https://blog.csdn.net/qq_24442769/article/details/79426609
  • build.gradle配置:
   implementation 'android.arch.lifecycle:extensions:1.1.0'implementation 'android.arch.lifecycle:reactivestreams:1.1.0'

?

?

?

17.RxJava+RxAndroid的學習。

  作用:RxJava是一個Android中的響應式實現,RxAndroid將異步UI事件封裝起來。

  參考文章:https://www.cnblogs.com/zhaoyanjun/p/5175502.html

  github地址:https://github.com/ReactiveX/RxJava? 和? https://github.com/ReactiveX/RxAndroid

?

?

?

18.首頁功能完成。

  只要研究好一個頁面,基本上其他頁面都不在話下了。

  因為這個頁面,進行了網絡請求,視圖綁定,BaseFragment定義,接口API請求等,基本上能做的事情,這個頁面都會做。

  除此之外,還有一些通用的工具包,首頁Bean類型的定義,首頁的布局文件,抽屜的布局,只不過沒有處理點擊事件。

  預覽頁面如下:

  

  然后僅僅完成首頁之后,我進行打包,方便以后使用。

  百度云鏈接:https://pan.baidu.com/s/1VCiuVy21RLMOHflN9MP19A? ? ??

  密碼:hmci

  之后的過程應該就是舉一反三了!

  這里我總結一下過程:(想到哪寫到哪)

      1.首先定義了一個抽象類BaseFragment,讓這個每日推薦的Fragment來繼承它。不單單繼承,還要求傳入一個泛型類,這個泛型類繼承ViewDataBinding。

        這里就是為了方便處理數據的,因為用到MVVM模式,所有聲明了layout的視圖都生成一個視圖綁定類,進而可以獲取到數據。個人覺得就是為了簡化

        從視圖中findViewById的過程,其實在用的時候,還是有一次賦值的過程,不過就不用以前那么麻煩地看視圖id了。 

        言歸正傳,這個BaseFragment同樣繼承了Fragment,注意是v4的Fragment,這里是一坑。

        然后這個BaseFragment主要干什么?

        布局很簡單,最外層LinearLayout,里面一個RelativeLayout,再里面就是兩個LinearLayout,分別是正在加載和加載失敗的圖片及文字的顯示。

        所以啊,布局中的RelativeLayout其實就是顯示內容的,要么這個內容為正在加載,要么為加載失敗,要么就是內容了,就這三種情況。

        值得一提的是,使用MVVM模式是如何將內容添加到這個RelativeLayout中呢?

        這里其實是用了DataBindingUtil.inflate方法,動態生成一個泛型類(繼承于ViewDataBinding),然后用RelativeLayout.addView方法添加即可。

        回想一下Fragment的生命周期~

        首先onAttach->onCreateView->onCreate->onActivityCreate->onStart->onResume,到這里視圖才能真正展示。。。

        所以在onActivityCreate中可以做什么呢?

        答案當然就是:開啟動畫啦。然后就是設置失敗刷新的點擊事件。反正這里就是需要干嘛就干嘛。

        然后還有一些方法,比如顯示加載中狀態,加載完成狀態,加載失敗狀態,主要處理視圖的隱藏,這里還是簡單。主要方便繼承者調用嘛。

        重要點1:然后就是實現Fragment數據的緩加載,其實就是判斷fragment是否可見,可見才進行請求。

        重要點2:然后需要添加一條消息,就是你數據在一個子線程里請求請求請求...完成之后,要通過一條消息發送給主線程,主線程來處理數據。

            ? ?注意在onDestroy中,將這條消息取消掉,否則內存泄漏就慘咯,然后自己也寫一個移除方法。 

?

      2.好了,現在有BaseFragment了。那么現在還需要對當前頁面單獨設置一個接口,用來實現僅僅這個頁面才會做的一些方法。

        對于主頁來說,我需要顯示輪播圖,顯示主頁列表,顯示主頁錯誤頁面,顯示旋轉動畫,取主頁緩存。

?

      3.然后就是EverydayFragment的具體實現了,原來在這里面才真正開啟動畫的,所以這樣的話會更加靈活處理各種頁面動畫。

        原來這里不是用的BaseFragment中的動畫,他是自己單獨寫的一個動畫。所以在它自己的布局中有一個獨特的動畫圖。

        這里的需要定義一個類似于之前MVP模式中的P(presenter),這里因為用到MVVM模式,所以效果是一樣的,不過這里名字為viewModel了。

?

      4.來看一下這個處理器吧。(我習慣稱處理網絡請求的東西叫做處理器,不過這里進行了兩次封裝,還有一個我就叫具體網絡請求器吧)

        這里還包裝了一層,將真正的網絡請求封裝了。

        首先看一下第一層處理器。

        在構造器里面建立了一個具體網絡請求器的實例。這個可以叫做創建型模式吧。

        簡單理一下網絡數據加載過程:

          在處理器中調用了網絡請求器的同名的方法,用了一個接口作為回調3種情況,1個是成功,1個是加載失敗,1個是添加消息給basefragment。

          如果加載成功,則顯示數據,然后將緩存清理,重新添加最新的緩存。如果沒有數據列表,則從緩存中拿,緩存也沒有,則重新請求。

          如果加載失敗,就嘗試從緩存中讀取,如果緩存有數據,就顯示列表數據。如果緩存也沒數據,則顯示BaseFragment中定義的錯誤界面。

        然后看一些這個具體網絡請求器干了些什么?

          首先是具體請求輪播圖。調用的過程真的太講究了,得好好學學別人的封裝過程。

          首先是定義了一個同名的請求方法后,里面傳入了一個接口,主要是處理具體的回調。

        網絡封裝過程:

          首先HttpClient是一個網絡請求類,這是一個接口。因為每個接口會有一個BaseUrl。

          這個HttpClient里面有一個Builder類,里面處理各種請求,返回的都是HttpClient對象。

          為什么會返回HttpClient對象呢?因為這里還用了一個BuildFactory類,來封裝Retrofit請求,設置一些請求參數等。

          最后還是要回到HttpClient,然后這里面還有請求的具體參數寫的API請求,返回Observable<T>類型數據。

        

        5.獲取到網絡數據后該怎么顯示呢?

          答案就是適配器了。

          在哪里設置適配器?

          這個就得看著自己了,在繼承BaseFragment的類中設置。在這個繼承BaseFragment中有很多實例,如綁定Header布局對象,綁定Footer布局對象,

            當前Fragment的適配器,當前Fragment的ViewModel。

          這個Header布局對象就是當前Fragment頁面最上方的布局,一個banner,一個4個圖標入口。使用RecycleView.addHeaderView方法即可。

          如果RecyclerView滑動不流暢,需設置recylerView.setNestedScrollingEnabled(false);

          注意在onPause中停止全部圖片請求,在onResume繼續圖片請求。

          這個適配器就是處理數據顯示的一個關鍵類了。

          首先他繼承了BaseRecyclerViewAdapter,無賴,只能硬著頭皮先看BaseRecyclerViewAdapter了。

          這個BaseRecyclerViewAdapter也是繼承了RecyclerView.Adapter<BaseRecyclerViewHolder>,無賴,還得先了解BaseRecyclerViewHolder啦

          BaseRecyclerViewHolder主要就是一個視圖持有者,竟然定義了兩個泛型,T是我們的數據類型,D是一個視圖綁定類。

          因為繼承了RecyclerView.ViewHolder,那么它的作用也就是容納視圖的作用了。所以這個BaseRecyclerVIewHolder的作用就是執行

            ViewDataBinding的一個executePendingBindings方法而已。

          BaseRecyclerViewAdapter所以就該實現父類中定義的抽象方法onBindViewHolder了。其他就是一些數據的增加刪除獲取了。

          EverydayAdapter正是繼承了BaseRecyclerViewAdapter了,然后具體實現了兩個必須實現的方法,getItemViewType,onCreateViewHolder了

?

?

19.對于適配器中的getItemViewType的理解。

  現在才真正理解適配器中的函數。

  其實里面的position,并不是一開始就加載完。而是加載到手機屏幕高度,就是說position只會填充完當前手機屏幕。

  然后滑動手機屏幕后,這個position才會做相應的改變。

?

?

20.學會了自定義處理WebView的活動(通用)。

  現在的APP基本都會用到webView,特別是類似于微信那種自帶進度條的WebView很常見。

  所以現在新建了一個專門處理webView的活動,可能只是這個項目通用吧,不同項目根據自己需求酌情修改即可。

  這個網頁可以處理很多東西,撥打電話,發送短信,上傳圖片,播放視頻,循環顯示網頁標題,進度條,可以說比較通用吧。

  參考文章:https://github.com/youlookwhat/WebViewStudy

  

          

21.以后再補充。

轉載于:https://www.cnblogs.com/Jason-Jan/p/8886805.html

總結

以上是生活随笔為你收集整理的从Github开源项目《云阅》所学到的知识的全部內容,希望文章能夠幫你解決所遇到的問題。

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

亚洲视频一区二区三区在线观看 | 大型av综合网站 | 国产精品视频久久久 | 国产亚洲精品日韩在线tv黄 | 国产一区二区三精品久久久无广告 | 久久精品爱爱视频 | 日韩高清观看 | 国产精品麻豆91 | 一区二区三区在线视频111 | 九九视频网 | 综合网伊人 | 伊人久久电影网 | 97色资源 | 青青河边草观看完整版高清 | 在线色亚洲 | 久操久 | 亚洲国产精品va在线看黑人 | 国产 中文 日韩 欧美 | 最近2019年日本中文免费字幕 | 久久爱资源网 | 久久免费公开视频 | 成人av av在线 | 色欲综合视频天天天 | 国产精品毛片久久久久久 | 国产免码va在线观看免费 | 91精品国产乱码久久桃 | 欧美精品中文在线免费观看 | 四虎影视精品 | 99久久999久久久精玫瑰 | 免费观看福利视频 | 麻豆视频免费网站 | 在线观看日本韩国电影 | 亚洲精品资源在线观看 | 日韩欧美在线观看一区 | 国产午夜av| 首页国产精品 | 国产精品中文字幕av | 国内揄拍国内精品 | 六月激情婷婷 | 免费一级片在线观看 | av永久网址 | 欧美资源在线观看 | 91综合视频在线观看 | 日韩成片 | 五月婷香| 亚洲精品一区二区久 | bbb搡bbb爽爽爽 | 日韩中文字幕第一页 | 91精品国自产在线 | 狂野欧美激情性xxxx | 久久五月天色综合 | 国产黄免费看 | 久久人人精 | 亚洲精品裸体 | 日韩综合一区二区三区 | 精品久久久久国产 | 国产精品久久久久久久久久不蜜月 | 日韩在线视频免费观看 | 国产精品视频99 | 欧美激情另类文学 | 成人黄色短片 | 成人一区电影 | 国产一区二区中文字幕 | 国产精品一区二区久久精品爱微奶 | 色天天久久| 激情综合色综合久久 | 亚洲伊人天堂 | 天天综合网久久 | 日韩在线视频网站 | 国产精品1区2区3区在线观看 | 一本色道久久综合亚洲二区三区 | 亚洲在线视频播放 | 日韩午夜视频在线观看 | 91精品视频在线观看免费 | 亚洲手机天堂 | 日韩成人精品 | 久久久国产影视 | 人人澡人人模 | 免费看黄在线网站 | 日本在线观看视频一区 | 天天综合视频在线观看 | 麻豆免费在线播放 | 久久伊人精品一区二区三区 | 91热爆在线观看 | 综合五月 | a久久免费视频 | av免费电影在线 | 成年人免费在线观看网站 | 91热精品 | 亚洲精品乱码久久久一二三 | 天天玩天天干 | 中文视频在线播放 | 久久成人一区二区 | 天天色婷婷 | 国产精品24小时在线观看 | 久久艹艹 | 四虎在线观看视频 | 视频精品一区二区三区 | 久久黄色片子 | av丁香花| 日本视频久久久 | 国产成人精品一区二三区 | 在线中文字幕观看 | 最新日本中文字幕 | 狠狠色丁香久久婷婷综合丁香 | 久久婷婷精品视频 | 日三级在线 | 欧美日韩中文在线观看 | 天天操天天干天天爽 | 啪啪精品| 91理论片午午伦夜理片久久 | 在线观看国产v片 | 成人av一二三区 | 视频在线观看入口黄最新永久免费国产 | 最近中文字幕免费av | 天天做天天爱天天综合网 | 91网页版在线观看 | 色99导航| 亚洲免费在线播放视频 | 国产淫a| 国产精品久久久久久久毛片 | 国产精品久久久久三级 | 成人性生交视频 | 久久久影视 | 国产一区影院 | 亚洲精品字幕在线观看 | 在线探花| 操久久免费视频 | 中文字幕乱在线伦视频中文字幕乱码在线 | 色婷婷国产精品一区在线观看 | av日韩精品| 黄色毛片在线 | 久久精品一区二区三区中文字幕 | 免费看一级片 | 操高跟美女 | 一区二区三区韩国免费中文网站 | 欧美激情精品一区 | 中文字幕 第二区 | 激情伊人五月天 | 精品在线小视频 | 91久久久国产精品 | 亚洲色图色 | 亚洲视频网站在线观看 | 欧美91精品国产自产 | 四虎影视成人永久免费观看亚洲欧美 | 天天爱天天干天天爽 | 久久久久国产精品www | 久久国产精品免费一区二区三区 | 亚洲精品午夜一区人人爽 | 国产 视频 久久 | 欧美一区中文字幕 | 午夜色婷婷| 在线视频 成人 | 国产精品日韩精品 | 精品一区欧美 | 欧美色精品天天在线观看视频 | 成人av资源在线 | 一级黄色电影网站 | 国产亚洲精品久久久久久久久久 | 婷婷中文字幕综合 | 国产精品少妇 | 日韩免费成人 | 国产免费午夜 | 久久精品视频5 | 91av资源在线 | 最近中文字幕国语免费高清6 | 日本三级香港三级人妇99 | 天天干天天操天天做 | 91大神dom调教在线观看 | av电影免费在线看 | 亚洲永久精品国产 | 97狠狠操| 欧美日韩激情视频8区 | 国产精品区一区 | 国产精品18久久久久vr手机版特色 | 91手机视频 | 东方av免费在线观看 | 中文字幕免费高清在线观看 | 亚洲人人爱 | 久久久久久久av | 黄色毛片大全 | 国产精品综合久久久久 | 亚洲国产精品va在线看黑人动漫 | 日本韩国精品在线 | 国产91aaa | 国产黄色美女 | 九草视频在线 | 天天干天天干天天干天天干天天干天天干 | 日韩欧美视频一区二区 | 国产又黄又猛又粗 | 一区二区三区久久精品 | 国产在线视频不卡 | 日韩在线免费播放 | 日韩欧美一区二区三区免费观看 | 国产精品久久99综合免费观看尤物 | 日韩二区在线播放 | 99久久婷婷国产综合亚洲 | 黄色亚洲精品 | 亚洲国产经典视频 | 色综合天天综合网国产成人网 | 日本韩国精品一区二区在线观看 | 五月婷婷在线视频观看 | 一本一本久久a久久精品牛牛影视 | 麻花传媒mv免费观看 | 91成人看片| 国产精品av免费 | 国产一区二区三区网站 | 在线а√天堂中文官网 | 国产一区视频导航 | 一本一道久久a久久精品 | 丁香狠狠| 婷婷久久亚洲 | 中文字幕 国产精品 | 毛片888| 在线观看午夜 | 伊人久久国产精品 | 日韩免费视频 | www四虎影院| 2022久久国产露脸精品国产 | 国产成视频在线观看 | 国产精品完整版 | 亚洲无人区小视频 | 91麻豆精品91久久久久同性 | 特级aaa毛片 | 精品国产免费人成在线观看 | 免费日韩一区二区三区 | 欧洲精品视频一区二区 | 97超碰人人网 | 日韩免费观看一区二区三区 | 热久久免费国产视频 | 麻豆91在线看 | 欧美老人xxxx18 | 99热九九这里只有精品10 | 久久tv| 亚洲天天做 | 国产午夜精品福利视频 | 日韩二区三区在线 | 亚洲天堂自拍视频 | 欧美怡红院视频 | 国产在线一卡 | 亚一亚二国产专区 | www.97视频| 久久久久成人精品免费播放动漫 | 国产精品二区在线观看 | www.香蕉视频在线观看 | 天天干天天射天天插 | 国产一级二级在线播放 | 香蕉在线观看视频 | 激情综合啪 | 91亚洲精品久久久蜜桃网站 | 日韩av电影一区 | 国产精品久久久久av免费 | 6080yy午夜一二三区久久 | 在线观看国产永久免费视频 | 黄色一级片视频 | 四虎在线免费观看 | 日日精品| 99热最新地址 | 久久国产成人午夜av影院宅 | 日日操天天爽 | 久久电影国产免费久久电影 | 日韩高清国产精品 | 在线免费观看黄 | 国产69精品久久99的直播节目 | 综合网在线视频 | av成人免费在线看 | 国产美女精彩久久 | 成人亚洲欧美 | 久久婷婷丁香 | 日韩3区 | 免费91麻豆精品国产自产在线观看 | 国产3p视频 | 国产精品专区h在线观看 | 国产一级二级在线观看 | 高清在线一区 | 69国产精品视频 | 亚洲精品66 | 99久e精品热线免费 99国产精品久久久久久久久久 | 园产精品久久久久久久7电影 | 射射射av| 国产色在线观看 | 欧美天堂久久 | 精品欧美一区二区三区久久久 | 日日夜夜中文字幕 | 国产伦理久久精品久久久久_ | 最新中文字幕在线播放 | 丁香五月缴情综合网 | 久草久热| 久草线| 美女久久久久久久 | 久草在线视频资源 | 808电影免费观看三年 | aⅴ精品av导航 | 欧美日本一区 | 美女免费视频一区二区 | 韩国在线一区二区 | 人人澡人人爽欧一区 | 久久99深爱久久99精品 | 日韩3区| 欧美精品三级在线观看 | 91中文字幕一区 | 亚洲综合小说电影qvod | 成人av一区二区三区 | 中文字幕91视频 | 精品久久久久久综合日本 | 99精品亚洲 | 国产精品视频在线观看 | 亚洲不卡av一区二区三区 | 五月天激情综合 | 国产免费av一区二区三区 | 亚洲区视频在线 | 97视频精品 | 久久精品一区二区 | 黄免费网站 | 成人影视免费 | 亚洲国产视频a | 美女久久久久久久久久 | www.久久色| a√国产免费a | www.国产在线视频 | 91福利视频一区 | 日韩在线视频一区 | 精品一区二区久久久久久久网站 | 国产一区不卡在线 | 菠萝菠萝在线精品视频 | 中国精品一区二区 | 丁香婷婷色 | 综合在线亚洲 | 粉嫩高清一区二区三区 | 人人插人人爱 | 在线播放国产一区二区三区 | 国产午夜精品理论片在线 | 欧洲黄色片| 欧美视频日韩视频 | 免费视频黄色 | 国产高清在线不卡 | 激情婷婷久久 | 毛片网站在线观看 | 成年人电影毛片 | 国产福利在线免费观看 | 国产 一区二区三区 在线 | 成年人免费电影在线观看 | 99热这里只有精品免费 | 亚洲国产午夜 | 日本不卡一区二区 | 日韩免费一区二区在线观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 免费日p视频| 国内精品久久久久影院一蜜桃 | 中文字幕五区 | 成年人网站免费在线观看 | 国产高清视频 | 久久久久久久99精品免费观看 | 瑞典xxxx性hd极品 | 久久99精品国产一区二区三区 | 五月婷婷综合久久 | www.99在线观看 | 久草在线免费色站 | 少妇bbw撒尿 | 国产日韩欧美在线 | 亚州精品天堂中文字幕 | 国产精品一区二区三区免费看 | 色香蕉在线视频 | 欧美日本不卡 | 亚洲精品观看 | 亚洲 中文 欧美 日韩vr 在线 | 中文字幕乱码电影 | 亚洲午夜久久久久久久久久久 | 欧美日韩三级在线观看 | 日韩视频免费观看高清完整版在线 | 亚洲天堂激情 | 久久国产网| 日韩剧情| 西西人体4444www高清视频 | 国产黄色精品在线 | 综合网在线视频 | 999日韩| 九九热.com| 91精品日韩 | 国产精品99久久久久的智能播放 | 色婷婷在线观看视频 | 欧美二区在线播放 | 999久久a精品合区久久久 | 成人免费网站视频 | 黄在线免费看 | 久草精品资源 | 免费看一级片 | 国产日韩在线观看一区 | 国产91精品一区二区绿帽 | 97碰在线 | 五月天视频网站 | 日韩a在线播放 | 五月亚洲 | 午夜精选视频 | 欧美人人爱 | 女女av在线 | 国产玖玖精品视频 | 亚洲精品成人在线 | 国产色女人| 一区二区三区久久精品 | 亚洲精品乱码久久久久久蜜桃欧美 | 91福利视频免费 | 亚洲在线网址 | 久久成年人网站 | 久久精品高清 | 亚洲区二区 | 成人高清av在线 | 少妇bbw搡bbbb搡bbb | 香蕉97视频观看在线观看 | 丁香伊人网 | 成人免费大片黄在线播放 | 伊人在线视频 | 免费视频成人 | mm1313亚洲精品国产 | 日韩精品视频久久 | 人人超在线公开视频 | 五月天久久激情 | 久久综合九色综合久99 | 国模精品一区二区三区 | 国产精品福利一区 | 亚洲一区二区精品 | 婷婷成人综合 | 中国一级片视频 | 亚洲精品视频在线观看免费视频 | 日本中文字幕在线看 | 免费的黄色的网站 | 天堂av在线7 | 日韩av一区在线观看 | 欧美国产三区 | 人人爽人人看 | 天天插天天狠 | 9热精品| 亚洲欧美偷拍另类 | www.av免费观看 | 在线成人性视频 | 中文字幕在线看片 | 三级av免费观看 | 成人免费 在线播放 | 欧美黄色特级片 | 激情导航 | 在线观看 亚洲 | 91禁看片| 一区二区三区在线影院 | 欧美福利视频一区 | 能在线观看的日韩av | 日韩网站一区二区 | 亚洲国产成人精品电影在线观看 | 久久网站最新地址 | 色夜视频 | 这里只有精品视频在线 | 蜜臀av性久久久久av蜜臀妖精 | 色就色,综合激情 | 久久精品国产第一区二区三区 | 亚洲2019精品 | 欧美一区免费在线观看 | 国产一区二区三区久久久 | 午夜国产一区二区 | 日韩黄色软件 | 亚洲黄色精品 | 日韩啪啪小视频 | 福利一区视频 | 日韩精品久久一区二区三区 | 亚洲欧美va | 欧美色精品天天在线观看视频 | 91看片黄色| 日韩色在线| 在线视频福利 | 亚洲va在线va天堂va偷拍 | 亚洲综合在线观看视频 | av一本久道久久波多野结衣 | 日本中文字幕在线免费观看 | 国产成人黄色在线 | 亚洲日本韩国一区二区 | 久久免费公开视频 | 国产精品毛片一区二区在线 | 中文乱码视频在线观看 | 在线综合色 | 91在线国内视频 | 精品国自产在线观看 | 久久狠狠一本精品综合网 | av中文字幕在线播放 | 婷婷色在线视频 | 久久国产热视频 | 在线观看蜜桃视频 | 国产精品一区二区三区久久久 | 日韩在线三区 | 中文国产字幕 | 成人毛片在线观看 | 在线亚洲人成电影网站色www | 色射色| 香蕉影视在线观看 | 午夜电影一区 | 亚洲三级精品 | 在线导航av | 日韩国产精品久久久久久亚洲 | 精品国精品自拍自在线 | 中文字幕亚洲情99在线 | 色天天天| 精品亚洲午夜久久久久91 | 日韩av一区二区在线影视 | 91在线免费观看网站 | 国产亚洲精品免费 | 亚洲精品在线电影 | 亚洲天堂香蕉 | 日韩视频在线播放 | 男女全黄一级一级高潮免费看 | 国产精品永久久久久久久久久 | 亚洲 欧美 变态 国产 另类 | 日韩激情网 | 久久婷婷综合激情 | 亚洲伊人婷婷 | 免费亚洲精品 | 干狠狠| 色视频网页 | 五月激情在线 | 免费在线黄色av | 国产一区在线免费 | 久久久不卡影院 | 在线观看一区二区精品 | 中文字幕高清在线 | 九九视频免费观看视频精品 | 午夜久久久精品 | 三级黄免费看 | 亚洲精品美女久久久久网站 | 中文字幕你懂的 | av在线短片 | 久久99国产精品二区护士 | 91精品视频一区二区三区 | 午夜精品一区二区三区可下载 | 婷婷久久综合网 | 亚洲国产小视频在线观看 | 999久久国产精品免费观看网站 | 日韩美在线观看 | 国产精品免费麻豆入口 | 一区二区三区 中文字幕 | 国产欧美日韩精品一区二区免费 | 黄色www免费 | 国产在线观看av | 91亚·色| 永久中文字幕 | 国产一区二区三区黄 | 在线观看一级片 | 久久综合婷婷综合 | 国产福利资源 | 国产精品久久久久久久妇 | 在线国产黄色 | 久久久久久久久久久久国产精品 | 国产三级av在线 | 国产日韩欧美在线观看视频 | 日韩色一区二区三区 | 中文字幕在线播放一区 | 亚洲国产wwwccc36天堂 | 在线天堂8√ | 国产色视频网站2 | 国产精品免费麻豆入口 | 中文字幕永久在线 | 麻豆极品| 黄色三级免费观看 | 免费视频一级片 | 亚洲精品在线国产 | 深夜国产福利 | 亚洲女人av | 天天干,天天操,天天射 | 波多野结衣视频一区二区三区 | 久久综合激情 | 国产高清 不卡 | 91黄色视屏 | 国产亚洲精品中文字幕 | 成人影片免费 | 99热这里只有精品1 av中文字幕日韩 | 99在线视频精品 | 天堂视频中文在线 | 亚洲另类在线视频 | 欧美激情第十页 | 国产成人精品在线播放 | 精品1区二区 | 国产精品久久久久久婷婷天堂 | 国产区久久 | 美女网站视频久久 | 亚洲国产三级在线观看 | 久久96 | 欧美一级淫片videoshd | 国内精品久久久久久久久久久久 | 欧美美女一级片 | 国产男女免费完整视频 | 免费男女羞羞的视频网站中文字幕 | 亚洲综合狠狠干 | 色综合色综合久久综合频道88 | 黄色小说在线观看视频 | 亚洲91网站 | a资源在线| 国产一级免费在线 | 在线国产一区 | 久久五月精品 | 色五月成人 | 久草在线费播放视频 | 国产尤物在线视频 | 一区二区三区 亚洲 | 婷婷伊人网 | 久久嗨| 韩国精品一区二区三区六区色诱 | 狠狠网亚洲精品 | 欧美精品亚洲二区 | 色诱亚洲精品久久久久久 | 日韩av在线一区二区 | 国产91大片 | 午夜久久久影院 | 日本精品视频一区二区 | 欧美不卡视频在线 | 蜜臀aⅴ国产精品久久久国产 | 美女视频黄色免费 | 色综合久久久久久久 | av免费成人| 日韩资源在线观看 | 久久黄色免费观看 | 成人在线视频论坛 | 亚洲区色| 日韩欧美大片免费观看 | 日韩中文在线字幕 | 91麻豆精品| 麻豆视频免费播放 | 中文字幕日韩一区二区三区不卡 | 奇米网在线观看 | 免费亚洲精品视频 | 91精品久 | 久久久久久久久久久久99 | 日本老少交| 国精产品满18岁在线 | 久久免费视频观看 | 中日韩免费视频 | 91成人天堂久久成人 | 欧美日韩在线免费观看视频 | 欧美激情第一页xxx 午夜性福利 | 免费高清在线观看成人 | 看片网站黄色 | 午夜久久电影网 | 国产 欧美 在线 | 久久久国产精华液 | 国产精品毛片完整版 | 国产精品视频大全 | 国产粉嫩在线观看 | 中文字幕日韩伦理 | 亚洲精品日韩一区二区电影 | 天堂av在线网 | 国产精品白浆 | 天天爽天天爽 | 亚洲国产资源 | 99精品色 | 午夜精品久久久99热福利 | 国产精品午夜在线观看 | 国产午夜精品一区二区三区在线观看 | 久久 精品一区 | 国内外成人免费在线视频 | 综合影视 | 人人爽人人澡人人添人人人人 | 天天爽天天搞 | 国产精品毛片一区二区在线看 | 亚洲精品中文字幕视频 | 日日操夜| 在线影视 一区 二区 三区 | 国产不卡在线视频 | 欧美性大战久久久久 | 超碰在线99 | 999电影免费在线观看2020 | 在线看片一区 | 亚洲更新最快 | 丁香六月激情婷婷 | 国产精品久久久久久久久久久久午夜片 | 日本黄色免费电影网站 | av成人资源 | 91精品国产乱码久久桃 | 成人h在线播放 | 中文字幕精品三级久久久 | 91精品1区 | 成人免费观看视频网站 | 亚洲国产精品传媒在线观看 | 亚洲国内精品视频 | 久久久精品亚洲 | 欧美91精品国产自产 | 99综合电影在线视频 | 狠狠色丁香婷婷综合最新地址 | 日韩欧美电影在线观看 | 成人av片在线观看 | 欧美激情另类文学 | 91黄色成人| 偷拍区另类综合在线 | 国产91全国探花系列在线播放 | 四虎视频| 福利电影久久 | 国产生活一级片 | 亚洲伦理电影在线 | 国产精品一区二区三区四区在线观看 | 成人免费看片98欧美 | 中文亚洲欧美日韩 | 国产精品11 | 五月婷婷激情综合 | 就操操久久 | 天天天天射 | 国产在线观看一区 | 日韩午夜网站 | 日韩一区精品 | 久久免费精品视频 | 亚洲精品网址在线观看 | 亚洲精品一区二区精华 | 久久黄色免费观看 | 六月色丁香 | 亚洲精品国产欧美在线观看 | 91插插视频| 97av影院| 久久久久草 | 超碰97在线人人 | 免费高清无人区完整版 | 亚洲精品一区二区久 | 91精彩视频在线观看 | 一级性视频 | 国产精品毛片一区 | 瑞典xxxx性hd极品 | 免费电影播放 | 亚洲精品视频观看 | 国产精品一区二区三区99 | 日韩系列在线 | 精品一区二区在线免费观看 | 国产高清在线精品 | 中文字幕免 | av免费播放 | 日韩高清精品一区二区 | 最新日韩在线观看 | 午夜精选视频 | 伊人天天| 五月婷婷六月丁香 | 91九色蝌蚪视频网站 | 色妞色视频一区二区三区四区 | 国产在线观看午夜 | caobi视频 | 色播五月激情五月 | 免费男女网站 | 干干夜夜 | 成人三级黄色 | 久久婷婷国产色一区二区三区 | 99国产精品久久久久久久久久 | 国产精品永久在线观看 | 午夜精品久久久久久 | 欧美伦理电影一区二区 | 日韩精品一区在线播放 | 日韩精品一区二区三区中文字幕 | 不卡中文字幕av | 精品国产激情 | 日韩在线视频免费看 | 日本论理电影 | 国产精品视频最多的网站 | 国内外激情视频 | 久久免费视频6 | 国产小视频在线看 | 999久久 | 天天爽天天爽夜夜爽 | 成人丁香花 | av免费电影在线 | 中文字幕av在线免费 | 国产成人av网站 | 免费三级骚 | 香蕉视频网址 | 五月激情片 | av资源免费在线观看 | 色综合久久久久综合 | 婷婷日 | 久久免费看 | 99激情网| 精品久久久久免费极品大片 | 国产女教师精品久久av | 久久在现 | 国产精品涩涩屋www在线观看 | 成人免费观看网址 | 婷婷精品进入 | 久久99精品久久久久婷婷 | 久久久伊人网 | 亚洲成人av一区二区 | free. 性欧美.com | 成人九九视频 | 久久婷婷色综合 | 麻豆成人网 | 麻豆av电影 | 国产女人免费看a级丨片 | 91大神在线观看视频 | 免费观看国产成人 | 免费成人在线视频网站 | 欧美日韩69 | 热久久精品在线 | 色综合久久久久综合 | 黄色最新网址 | 亚洲综合精品在线 | 97影视| 欧美日韩国产在线 | 国产99久久精品 | 亚洲无吗视频在线 | 日产乱码一二三区别在线 | 亚洲三级精品 | 亚洲黄色免费在线 | 亚洲成人av一区二区 | 日韩综合视频在线观看 | 欧美在线视频免费 | 黄色a级片在线观看 | 国产精品久久久久久久久久 | 亚州国产视频 | 99久久99久久综合 | 一区二区精 | 国产一级精品在线观看 | 免费在线观看亚洲视频 | 色wwww| 午夜电影av | 亚洲aⅴ在线 | 免费a视频 | 国产又黄又爽无遮挡 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 3d黄动漫免费看 | 天天色天天骑天天射 | 色伊人网| 在线观看av麻豆 | 午夜视频在线观看欧美 | 国产在线精品国自产拍影院 | 国产色一区 | 午夜精品一区二区三区视频免费看 | 99精品国产亚洲 | a在线观看视频 | 在线免费三级 | 99久久精品日本一区二区免费 | 日本黄色免费看 | 欧美怡红院| 国产精品原创视频 | 成人欧美在线 | 操处女逼 | 91久久国产精品 | 国产成人99av超碰超爽 | www.av在线播放 | 国产精品网站 | 岛国av在线免费 | 在线观看亚洲a | 香蕉97视频观看在线观看 | 中文字幕在线观看网址 | 国产91对白在线播 | 国产成人一区在线 | 亚洲激情在线视频 | 91av官网| 久久午夜影视 | 成年人免费在线观看 | 一区三区视频 | 成人午夜黄色影院 | 中文字幕欧美激情 | 8x成人免费视频 | 免费观看一级视频 | 五月婷婷影院 | 色激情在线 | 免费在线观看av网站 | a级片网站| 亚洲天堂精品视频 | 成人黄色小说视频 | av福利在线导航 | 日韩a在线| 免费观看91视频 | 国产精品video爽爽爽爽 | 欧美一级看片 | 国产精品网站一区二区三区 | 国产专区视频在线观看 | 久草香蕉在线视频 | 五月天亚洲综合小说网 | 国产精品毛片久久久久久久久久99999999 | 99精品国产一区二区三区不卡 | 波多野结衣在线中文字幕 | 欧美日韩高清在线观看 | 日韩欧美精品在线视频 | 五月天色丁香 | 日韩二区在线观看 | 在线看欧美 | 午夜aaaa| 黄色a在线观看 | 最近免费观看的电影完整版 | 五月天精品视频 | 波多野结衣动态图 | 91av视频观看 | 日本性高潮视频 | 亚洲丝袜一区 | 国内精品久久久久影院优 | 在线成人中文字幕 | 亚洲在线视频播放 | 玖玖玖国产精品 | 国产日韩在线看 | 亚洲国产wwwccc36天堂 | 天天色天天草天天射 | av电影久久 | 高清不卡免费视频 | 欧美一级免费 | 欧美在线视频a | 一本到在线| 婷婷激情综合 | 五月婷婷香蕉 | 九九综合九九 | 狠狠狠狠狠操 | 日韩一区二区三区观看 | 国产精品久久久久久妇 | 香蕉国产91| 国产91九色视频 | 国产精品午夜在线观看 | 日日干天天射 | 久久精品观看 | 美女网站久久 | 日韩精品一区二区三区高清免费 | 国产精品18videosex性欧美 | 成人羞羞视频在线观看免费 | 国内精品国产三级国产aⅴ久 | 国产成人三级在线 | 亚洲日本va午夜在线影院 | 91精品国产综合久久婷婷香蕉 | 亚洲日本精品 | 婷婷激情五月 | 亚洲午夜精品福利 | 欧美在线aa | 国产免费区 | 久久久久免费精品视频 | 激情婷婷在线观看 | 成人高清在线 | 国产精品乱码高清在线看 | 在线看国产一区 | 激情片av| 天天艹天天操 | 久久99国产精品免费网站 | 国产精品 国产精品 | 日韩综合在线观看 | 91免费高清在线观看 | 久久久久久久久久久久影院 | 午夜在线观看 | 日韩欧美视频免费在线观看 | 久久久久成人精品免费播放动漫 | 欧美另类激情 | 日韩激情第一页 | 欧美亚洲国产日韩 | 久视频在线播放 | 亚洲影视资源 | av片一区二区 | 精品国产自在精品国产精野外直播 | 日本亚洲国产 | 亚洲精品一区二区在线观看 | 久久av中文字幕片 | 麻豆av一区二区三区在线观看 | 国产日韩欧美视频在线观看 | 中文字幕在线视频一区二区三区 | 久久人人爽人人片 | 超碰在线人人 | 91精品色 | 精品自拍网 | 97超碰影视| 午夜久久久久久久久久久 | 人人精品 | 91精品国产一区二区三区 | 久久精品一区二区国产 | 久久经典国产 | 国产亚洲精品久久久久久网站 | 九色91在线 | 日韩欧美观看 | 亚洲人成人在线 | 91超级碰碰| 色婷婷综合久久久 | 日本精品中文字幕在线观看 | 91aaa在线观看 | 亚洲最大成人网4388xx | 亚洲综合国产精品 | 欧美va日韩va | 久草网视频在线观看 | 二区三区精品 | 国产欧美三级 | 999视频在线播放 | 五月天视频网站 | 韩国一区二区三区视频 | 欧美精品久久久久久久免费 | 国产小视频免费在线网址 | 玖玖在线播放 | 日韩欧美视频在线观看免费 | 久久久久9999亚洲精品 | 国产亚洲欧洲 | 中文字幕乱偷在线 | 国产精品99蜜臀久久不卡二区 | 国产第一页在线观看 | 国产在线观看你懂的 | 黄色三级免费网址 | 久久久久久久久久免费 | 这里只有精品视频在线观看 | 天天干天天操av | 亚洲精品影院在线观看 | 中文字幕精 | 欧美性精品 | 久日精品 | 97精品超碰一区二区三区 | 免费高清av在线看 | 国产精品久久久久久久久久 | 亚洲好视频 | 日韩精品欧美一区 | 久久网站最新地址 | 国产精品久久久久久久久久久久久久 | 有码中文字幕在线观看 | 在线看的av网站 |