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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android 仿拼多多可水平滚动RecyclerView,自定义滚动条滚动距离

發布時間:2024/5/8 Android 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 仿拼多多可水平滚动RecyclerView,自定义滚动条滚动距离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 仿拼多多可水平滾動RecyclerView,自定義滾動條滾動距離

2020年,希望大家一切平安如意,畢竟這是個出人意料的多事之秋。

一.效果圖:

?

二.快速實現:

1.主函數代碼:

import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.TextView;import java.util.ArrayList; import java.util.List;import me.samlss.broccoli.Broccoli; import me.samlss.broccoli.PlaceholderParameter; import me.samlss.utils.ScreenUtils; import me.samlss.utils.WheelView;/*** 可參考* https://blog.csdn.net/shenggaofei/article/details/78186177#comments_12759724* https://blog.csdn.net/Blog_Sun/article/details/95338124** https://blog.csdn.net/hhw332704304/article/details/88971381* https://blog.csdn.net/u010731746/article/details/83303190* https://blog.csdn.net/qq_36347817/article/details/103529540?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase*/ public class WheelActivity extends AppCompatActivity {private Broccoli mBroccoli;private Handler mHandler = new Handler();private WheelView mWheelView;private TextView tvAge;private PersonAgeAdapter mAgeAdapter;private MyAdapter mAdapter;private RecyclerView mRvAgeList,RvScroll;private int age_num= 0;private int mLastValue= 0;private int START_NUM= 12;private int END_NUM= 99; // private int [] endX;float endX = 0;private View view_slip_front,view_slip_front2,view_slip_front3,view_slip_front4;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_wheel);view_slip_front = findViewById(R.id.view_slip_front);view_slip_front2 = findViewById(R.id.view_slip_front02);view_slip_front3 = findViewById(R.id.view_slip_front03);view_slip_front4 = findViewById(R.id.view_slip_front04);mRvAgeList = findViewById(R.id.RvAgeList);RvScroll = findViewById(R.id.RvScroll);mWheelView = findViewById(R.id.rsv_ruler);tvAge = findViewById(R.id.tv_age);confitAgeWheelView();initAgeList(); // initDatas();initView();}/*** 仿拼多多可水平滾動RecyclerView,自定義滾動條滾動距離*/private void initView() {LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);mRvAgeList.setLayoutManager(manager);mAdapter=new MyAdapter(this,START_NUM,22);mRvAgeList.setAdapter(mAdapter);// 這里的mRvHx是需要綁定滾動條的RecyclerViewmRvAgeList.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView, dx, dy); // float endX;// 整體的總寬度,注意是整體,包括在顯示區域之外的。 // int range = mRvAgeList.computeHorizontalScrollRange(); // float density = getScreenDensity(); // // 計算出溢出部分的寬度,即屏幕外剩下的寬度 // float maxEndX = range - ScreenUtils.getScreenWidth(WheelActivity.this) + (25 * density) + 5; // // 滑動的距離endX[0] = endX[0] + dx;// 計算比例float proportion = endX[0] / maxEndX; // // //滑動的距離 // endX += dx; // //計算比例 // float proportion = endX / maxEndX; // // // 計算滾動條寬度 // int transMaxRange = ((ViewGroup) view_slip_front.getParent()).getWidth() - view_slip_front.getWidth(); // // 設置滾動條移動 // view_slip_front.setTranslationX(transMaxRange * proportion);//整體的總寬度,注意是整體,包括在顯示區域之外的。int range = mRvAgeList.computeHorizontalScrollRange();float density = getScreenDensity();//計算出溢出部分的寬度,即屏幕外剩下的寬度float maxEndX = range + (10 * density) + 5 - ScreenUtils.getScreenWidth(WheelActivity.this);//滑動的距離endX += dx;//計算比例float proportion = endX / maxEndX;//計算滾動條寬度int transMaxRange = ((ViewGroup) view_slip_front.getParent()).getWidth() - view_slip_front.getWidth();//設置滾動條移動view_slip_front.setTranslationX(transMaxRange * proportion);//02//計算滾動條寬度int transMaxRange2 = ((ViewGroup) view_slip_front2.getParent()).getWidth() - view_slip_front2.getWidth();//設置滾動條移動view_slip_front2.setTranslationX(transMaxRange2 * proportion);//03//計算滾動條寬度int transMaxRange3 = ((ViewGroup) view_slip_front3.getParent()).getWidth() - view_slip_front3.getWidth();//設置滾動條移動view_slip_front3.setTranslationX(transMaxRange3 * proportion);//04//計算滾動條寬度int transMaxRange4 = ((ViewGroup) view_slip_front4.getParent()).getWidth() - view_slip_front4.getWidth();//設置滾動條移動view_slip_front4.setTranslationX(transMaxRange4 * proportion);}});}public float getScreenDensity() {WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics dm = new DisplayMetrics();if (wm != null) {wm.getDefaultDisplay().getMetrics(dm);}int width = dm.widthPixels;// 屏幕寬度(像素)int height = dm.heightPixels; // 屏幕高度(像素)float density = dm.density;//屏幕密度(0.75 / 1.0 / 1.5)int densityDpi = dm.densityDpi;//屏幕密度dpi(120 / 160 / 240)return density;}/*** Android WheelView橫向選擇器*/private void confitAgeWheelView() {ArrayList localArrayList = new ArrayList();int i = 18;while (i <= 60) {StringBuilder localStringBuilder = new StringBuilder();localStringBuilder.append(String.valueOf(i));localStringBuilder.append("歲");localArrayList.add(localStringBuilder.toString());i += 1;}mWheelView.setItems(localArrayList);mWheelView.selectIndex(0);//設置默認選擇的年齡tvAge.setText(mWheelView.getItems().get(0));//設置默認顯示年齡 // mWheelView.selectIndex(6);//監聽mWheelView.setOnWheelItemSelectedListener(new WheelView.OnWheelItemSelectedListener() {@Overridepublic void onWheelItemChanged(WheelView wheelView, int position) {List<String> items = wheelView.getItems();String num = items.get(position);tvAge.setText(num+"");//根據改變的位置設置年齡}@Overridepublic void onWheelItemSelected(WheelView wheelView, int position) {age_num = position + 18;//選中數字因為position是從0開始的,所以要加上你初始化起始的數字大小 // List<String> items = wheelView.getItems(); // String num = items.get(position); // String nums = items.get(position); // tvAge.setText(num+"");}});}/*** 初始化年齡滑動條*/private void initAgeList() {LinearLayoutManager mLayoutManager =new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);RvScroll.setLayoutManager(mLayoutManager);mAgeAdapter = new PersonAgeAdapter(START_NUM, END_NUM,WheelActivity.this);RvScroll.setAdapter(mAgeAdapter);RvScroll.addOnScrollListener(new RecyclerView.OnScrollListener() {@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);// mBDownStep.setEnabled(false);// 效果在暫停時顯示, 否則會導致重繪異常if (newState == RecyclerView.SCROLL_STATE_IDLE) {mAgeAdapter.highlightItem(getMiddlePosition());RvScroll.scrollToPosition(getScrollPosition());mLastValue = getMiddlePosition(); // UserInfoManager.setAge(getMiddlePosition() + START_NUM);// mBDownStep.setEnabled(true); // 滑動時不可用, 停止時才可以}}@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) {// 值是實時增加tvAge.setText(String.valueOf(getMiddlePosition() + START_NUM));}});mAgeAdapter.highlightItem(getMiddlePosition());}/*** 獲取中間位置** @return 當前值*/private int getMiddlePosition() {return getScrollPosition() + (PersonAgeAdapter.ITEM_NUM / 2);}/*** 獲取滑動值, 滑動偏移 / 每個格子寬度** @return 當前值*/private int getScrollPosition() {return (int) ((double) RvScroll.computeHorizontalScrollOffset()/ (double) PersonAgeAdapter.getItemStdWidth());}/*** 初始化數據*/private void initDatas() {LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);mRvAgeList.setLayoutManager(manager);mAdapter=new MyAdapter(this,START_NUM,END_NUM);mRvAgeList.setAdapter(mAdapter);mRvAgeList.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);if(newState==RecyclerView.SCROLL_STATE_IDLE){mAdapter.highlightItem(getMiddlePositions());//將位置移動到中間位置((LinearLayoutManager)recyclerView.getLayoutManager()).scrollToPositionWithOffset(getScrollPositions(),0);System.out.println(getScrollPositions()+"");}}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {tvAge.setText(String.valueOf(getMiddlePositions() + START_NUM));}});mAdapter.highlightItem(getMiddlePositions());}/*** 獲取中間位置的position* @return*/private int getMiddlePositions() {return getScrollPositions()+(mAdapter.ITEM_NUM/2);}/*** 獲取滑動值, 滑動偏移 / 每個格子寬度** @return 當前值*/private int getScrollPositions() {return (int) (((double) mRvAgeList.computeHorizontalScrollOffset()/ (double) mAdapter.getItemWidth())+0.5f);} }

2.布局:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#fff"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"><TextViewandroid:id="@+id/tv_age"android:text="--"android:layout_marginTop="20dp"android:layout_gravity="center"android:layout_width="wrap_content"android:layout_height="wrap_content"/><me.samlss.utils.WheelViewandroid:id="@+id/rsv_ruler"android:layout_width="match_parent"android:layout_height="66dp"android:layout_marginLeft="20dp"android:layout_marginTop="50dp"android:layout_marginRight="20dp"android:scrollbarFadeDuration="1"app:lwvCenterMarkTextSize="18sp"app:lwvCursorSize="10dp"app:lwvMarkTextSize="15sp" /><android.support.v7.widget.RecyclerViewandroid:id="@+id/RvScroll"android:layout_gravity="center"android:layout_marginTop="20dp"android:layout_width="match_parent"android:layout_height="66dp"/><!-- <me.samlss.utils.MyHorizontalScrollView--> <!-- android:layout_marginTop="20dp"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="66dp">--><!-- </me.samlss.utils.MyHorizontalScrollView>--><android.support.v7.widget.RecyclerViewandroid:id="@+id/RvAgeList"android:layout_gravity="center"android:layout_width="match_parent"android:layout_height="66dp"/><FrameLayoutandroid:id="@+id/lay_slip"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:visibility="visible"><Viewandroid:layout_width="60dp"android:layout_height="8dp"android:background="@drawable/shape_bg_slip_behind" /><Viewandroid:id="@+id/view_slip_front"android:layout_width="40dp"android:layout_height="7.5dp"android:layout_gravity="center_vertical"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:background="@drawable/shape_bg_slip_front" /></FrameLayout><FrameLayoutandroid:layout_marginTop="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:visibility="visible"><Viewandroid:layout_width="100dp"android:layout_height="6dp"android:background="@drawable/shape_bg_slip_behind2" /><Viewandroid:id="@+id/view_slip_front02"android:layout_width="60dp"android:layout_height="6dp"android:layout_gravity="center_vertical"android:background="@drawable/shape_bg_slip_front2" /></FrameLayout><FrameLayoutandroid:layout_marginTop="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:visibility="visible"><Viewandroid:layout_width="100dp"android:layout_height="6dp"android:background="@drawable/shape_bg_slip_behind2" /><Viewandroid:id="@+id/view_slip_front03"android:layout_width="60dp"android:layout_height="6dp"android:layout_gravity="center_vertical"android:background="@drawable/shape_bg_slip_front3" /></FrameLayout><FrameLayoutandroid:layout_marginTop="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:visibility="visible"><Viewandroid:layout_width="150dp"android:layout_height="10dp"android:background="@drawable/shape_bg_slip_behind2" /><Viewandroid:id="@+id/view_slip_front04"android:layout_width="80dp"android:layout_height="10dp"android:layout_gravity="center_vertical"android:background="@drawable/shape_bg_slip_front4" /></FrameLayout></LinearLayout>

3.shape繪制圓角背景、漸變色背景

?shape_bg_slip_behind.xml:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="@color/gray_line" /><corners android:radius="5dp" /> </shape>

shape_bg_slip_front.xml:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="@color/colorAccent" /><corners android:radius="5dp" /> </shape>

shape_bg_slip_behind2.xml:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#ccc" /><corners android:radius="5dp" /> </shape>

?shape_bg_slip_front2.xml:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#ff6600" /><corners android:radius="5dp" /> </shape>

?shape_bg_slip_front3.xml:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#ff6600" /><corners android:radius="5dp" /><gradientandroid:angle="0"android:endColor="#FF38C9"android:startColor="#B463FF" /> </shape>

shape_bg_slip_front4.xml:?

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#ff6600" /><corners android:radius="5dp" /><gradientandroid:angle="90"android:endColor="#FF38C9"android:startColor="#B463FF" /> </shape>

?4.ScreenUtils獲得屏幕相關的輔助類

package me.samlss.utils;import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.View; import android.view.WindowManager;//獲得屏幕相關的輔助類 public class ScreenUtils {private ScreenUtils(){/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}/*** 獲得屏幕高度** @param context* @return*/public static int getScreenWidth(Context context){WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(outMetrics);return outMetrics.widthPixels;}/*** 獲得屏幕寬度** @param context* @return*/public static int getScreenHeight(Context context){WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(outMetrics);return outMetrics.heightPixels;}/*** 獲得狀態欄的高度** @param context* @return*/public static int getStatusHeight(Context context){int statusHeight = -1;try{Class<?> clazz = Class.forName("com.android.internal.R$dimen");Object object = clazz.newInstance();int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString());statusHeight = context.getResources().getDimensionPixelSize(height);} catch (Exception e){e.printStackTrace();}return statusHeight;}/*** 獲取當前屏幕截圖,包含狀態欄** @param activity* @return*/public static Bitmap snapShotWithStatusBar(Activity activity){View view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap bmp = view.getDrawingCache();int width = getScreenWidth(activity);int height = getScreenHeight(activity);Bitmap bp = null;bp = Bitmap.createBitmap(bmp, 0, 0, width, height);view.destroyDrawingCache();return bp;}/*** 獲取當前屏幕截圖,不包含狀態欄** @param activity* @return*/public static Bitmap snapShotWithoutStatusBar(Activity activity){View view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap bmp = view.getDrawingCache();Rect frame = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;int width = getScreenWidth(activity);int height = getScreenHeight(activity);Bitmap bp = null;bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height- statusBarHeight);view.destroyDrawingCache();return bp;}}

5.自定義類:(以下是Android RecyclerView 實現橫向滾動效果)?

Android RecyclerView 實現橫向滾動效果

package me.samlss.utils;import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.os.Parcel; import android.os.Parcelable; import android.support.v4.view.GestureDetectorCompat; import android.support.v4.view.ViewCompat; import android.text.TextPaint; import android.text.TextUtils; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.SoundEffectConstants; import android.view.View; import android.widget.OverScroller;import java.util.ArrayList; import java.util.List;import me.samlss.broccoli_demo.R;/*** */ public class WheelView extends View implements GestureDetector.OnGestureListener {public static final float DEFAULT_INTERVAL_FACTOR = 1.2f;public static final float DEFAULT_MARK_RATIO = 0.7f;private Paint mMarkPaint;private TextPaint mMarkTextPaint;private int mCenterIndex = -1;private int mHighlightColor, mMarkTextColor;private int mMarkColor, mFadeMarkColor;private int mHeight;private List<String> mItems;private String mAdditionCenterMark;private OnWheelItemSelectedListener mOnWheelItemSelectedListener;private float mIntervalFactor = DEFAULT_INTERVAL_FACTOR;private float mMarkRatio = DEFAULT_MARK_RATIO;private int mMarkCount;private float mAdditionCenterMarkWidth;private Path mCenterIndicatorPath = new Path();private float mCursorSize;private int mViewScopeSize;// scroll control args ---- startprivate OverScroller mScroller;private float mMaxOverScrollDistance;private RectF mContentRectF;private boolean mFling = false;private float mCenterTextSize, mNormalTextSize;private float mTopSpace, mBottomSpace;private float mIntervalDis;private float mCenterMarkWidth, mMarkWidth;private GestureDetectorCompat mGestureDetectorCompat;// scroll control args ---- endprivate int mLastSelectedIndex = -1;private int mMinSelectableIndex = Integer.MIN_VALUE;private int mMaxSelectableIndex = Integer.MAX_VALUE;public WheelView(Context context) {super(context);init(null);}public WheelView(Context context, AttributeSet attrs) {super(context, attrs);init(attrs);}public WheelView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(attrs);}protected void init(AttributeSet attrs) {float density = getResources().getDisplayMetrics().density;mCenterMarkWidth = (int) (density * 1.5f + 0.5f);mMarkWidth = density;mHighlightColor = 0xFFF74C39;mMarkTextColor = 0xFF666666;mMarkColor = 0xFFEEEEEE;mCursorSize = density * 18;mCenterTextSize = density * 22;mNormalTextSize = density * 18;mBottomSpace = density * 6;TypedArray ta = attrs == null ? null : getContext().obtainStyledAttributes(attrs, R.styleable.lwvWheelView);if (ta != null) {mHighlightColor = ta.getColor(R.styleable.lwvWheelView_lwvHighlightColor, mHighlightColor);mMarkTextColor = ta.getColor(R.styleable.lwvWheelView_lwvMarkTextColor, mMarkTextColor);mMarkColor = ta.getColor(R.styleable.lwvWheelView_lwvMarkColor, mMarkColor);mIntervalFactor = ta.getFloat(R.styleable.lwvWheelView_lwvIntervalFactor, mIntervalFactor);mMarkRatio = ta.getFloat(R.styleable.lwvWheelView_lwvMarkRatio, mMarkRatio);mAdditionCenterMark = ta.getString(R.styleable.lwvWheelView_lwvAdditionalCenterMark);mCenterTextSize = ta.getDimension(R.styleable.lwvWheelView_lwvCenterMarkTextSize, mCenterTextSize);mNormalTextSize = ta.getDimension(R.styleable.lwvWheelView_lwvMarkTextSize, mNormalTextSize);mCursorSize = ta.getDimension(R.styleable.lwvWheelView_lwvCursorSize, mCursorSize);}mFadeMarkColor = mHighlightColor & 0xAAFFFFFF;mIntervalFactor = Math.max(1, mIntervalFactor);mMarkRatio = Math.min(1, mMarkRatio);mTopSpace = mCursorSize + density * 2;mMarkPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mMarkTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);mMarkTextPaint.setTextAlign(Paint.Align.CENTER);mMarkTextPaint.setColor(mHighlightColor);mMarkPaint.setColor(mMarkColor);mMarkPaint.setStrokeWidth(mCenterMarkWidth);mMarkTextPaint.setTextSize(mCenterTextSize);calcIntervalDis();mScroller = new OverScroller(getContext());mContentRectF = new RectF();mGestureDetectorCompat = new GestureDetectorCompat(getContext(), this);selectIndex(0);}/*** calculate interval distance between items*/private void calcIntervalDis() {if (mMarkTextPaint == null) {return;}String defaultText = "888888";Rect temp = new Rect();int max = 0;if (mItems != null && mItems.size() > 0) {for (String i : mItems) {mMarkTextPaint.getTextBounds(i, 0, i.length(), temp);if (temp.width() > max) {max = temp.width();}}} else {mMarkTextPaint.getTextBounds(defaultText, 0, defaultText.length(), temp);max = temp.width();}if (!TextUtils.isEmpty(mAdditionCenterMark)) {mMarkTextPaint.setTextSize(mNormalTextSize);mMarkTextPaint.getTextBounds(mAdditionCenterMark, 0, mAdditionCenterMark.length(), temp);mAdditionCenterMarkWidth = temp.width();max += temp.width();}mIntervalDis = max * mIntervalFactor;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));}private int measureWidth(int widthMeasureSpec) {int measureMode = MeasureSpec.getMode(widthMeasureSpec);int measureSize = MeasureSpec.getSize(widthMeasureSpec);int result = getSuggestedMinimumWidth();switch (measureMode) {case MeasureSpec.AT_MOST:case MeasureSpec.EXACTLY:result = measureSize;break;default:break;}return result;}private int measureHeight(int heightMeasure) {int measureMode = MeasureSpec.getMode(heightMeasure);int measureSize = MeasureSpec.getSize(heightMeasure);int result = (int) (mBottomSpace + mTopSpace * 2 + mCenterTextSize);switch (measureMode) {case MeasureSpec.EXACTLY:result = Math.max(result, measureSize);break;case MeasureSpec.AT_MOST:result = Math.min(result, measureSize);break;default:break;}return result;}public void fling(int velocityX, int velocityY) {mScroller.fling(getScrollX(), getScrollY(),velocityX, velocityY,(int) (-mMaxOverScrollDistance + mMinSelectableIndex * mIntervalDis), (int) (mContentRectF.width() - mMaxOverScrollDistance - (mMarkCount - 1 - mMaxSelectableIndex) * mIntervalDis),0, 0,(int) mMaxOverScrollDistance, 0);ViewCompat.postInvalidateOnAnimation(this);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);if (w != oldw || h != oldh) {mHeight = h;mMaxOverScrollDistance = w / 2.f;mContentRectF.set(0, 0, (mMarkCount - 1) * mIntervalDis, h);mViewScopeSize = (int) Math.ceil(mMaxOverScrollDistance / mIntervalDis);}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mCenterIndicatorPath.reset();float sizeDiv2 = mCursorSize / 2f;float sizeDiv3 = mCursorSize / 3f;mCenterIndicatorPath.moveTo(mMaxOverScrollDistance - sizeDiv2 + getScrollX(), 0);mCenterIndicatorPath.rLineTo(0, sizeDiv3);mCenterIndicatorPath.rLineTo(sizeDiv2, sizeDiv2);mCenterIndicatorPath.rLineTo(sizeDiv2, -sizeDiv2);mCenterIndicatorPath.rLineTo(0, -sizeDiv3);mCenterIndicatorPath.close();mMarkPaint.setColor(mHighlightColor);canvas.drawPath(mCenterIndicatorPath, mMarkPaint);int start = mCenterIndex - mViewScopeSize;int end = mCenterIndex + mViewScopeSize + 1;start = Math.max(start, -mViewScopeSize * 2);end = Math.min(end, mMarkCount + mViewScopeSize * 2);// extends both endsif (mCenterIndex == mMaxSelectableIndex) {end += mViewScopeSize;} else if (mCenterIndex == mMinSelectableIndex) {start -= mViewScopeSize;}float x = start * mIntervalDis;float markHeight = mHeight - mBottomSpace - mCenterTextSize - mTopSpace;// small scale Y offsetfloat smallMarkShrinkY = markHeight * (1 - mMarkRatio) / 2f;smallMarkShrinkY = Math.min((markHeight - mMarkWidth) / 2f, smallMarkShrinkY);for (int i = start; i < end; i++) {float tempDis = mIntervalDis / 5f;// offset: Small mark offset Big markfor (int offset = -2; offset < 3; offset++) {float ox = x + offset * tempDis;if (i >= 0 && i <= mMarkCount && mCenterIndex == i) {int tempOffset = Math.abs(offset);if (tempOffset == 0) {mMarkPaint.setColor(mHighlightColor);} else if (tempOffset == 1) {mMarkPaint.setColor(mFadeMarkColor);} else {mMarkPaint.setColor(mMarkColor);}} else {mMarkPaint.setColor(mMarkColor);}if (offset == 0) {// center markmMarkPaint.setStrokeWidth(mCenterMarkWidth);canvas.drawLine(ox, mTopSpace, ox, mTopSpace + markHeight, mMarkPaint);} else {// other small markmMarkPaint.setStrokeWidth(mMarkWidth);canvas.drawLine(ox, mTopSpace + smallMarkShrinkY, ox, mTopSpace + markHeight - smallMarkShrinkY, mMarkPaint);}}// mark textif (mMarkCount > 0 && i >= 0 && i < mMarkCount) {CharSequence temp = mItems.get(i);if (mCenterIndex == i) {mMarkTextPaint.setColor(mHighlightColor);mMarkTextPaint.setTextSize(mCenterTextSize);if (!TextUtils.isEmpty(mAdditionCenterMark)) {float off = mAdditionCenterMarkWidth / 2f;float tsize = mMarkTextPaint.measureText(temp, 0, temp.length());canvas.drawText(temp, 0, temp.length(), x - off, mHeight - mBottomSpace, mMarkTextPaint);mMarkTextPaint.setTextSize(mNormalTextSize);canvas.drawText(mAdditionCenterMark, x + tsize / 2f, mHeight - mBottomSpace, mMarkTextPaint);} else {canvas.drawText(temp, 0, temp.length(), x, mHeight - mBottomSpace, mMarkTextPaint);}} else {mMarkTextPaint.setColor(mMarkTextColor);mMarkTextPaint.setTextSize(mNormalTextSize);canvas.drawText(temp, 0, temp.length(), x, mHeight - mBottomSpace, mMarkTextPaint);}}x += mIntervalDis;}}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (mItems == null || mItems.size() == 0 || !isEnabled()) {return false;}boolean ret = mGestureDetectorCompat.onTouchEvent(event);if (!mFling && MotionEvent.ACTION_UP == event.getAction()) {autoSettle();ret = true;}return ret || super.onTouchEvent(event);}@Overridepublic void computeScroll() {super.computeScroll();if (mScroller.computeScrollOffset()) {scrollTo(mScroller.getCurrX(), mScroller.getCurrY());refreshCenter();invalidate();} else {if (mFling) {mFling = false;autoSettle();}}}public void setAdditionCenterMark(String additionCenterMark) {mAdditionCenterMark = additionCenterMark;calcIntervalDis();invalidate();}private void autoSettle() {int sx = getScrollX();float dx = mCenterIndex * mIntervalDis - sx - mMaxOverScrollDistance;mScroller.startScroll(sx, 0, (int) dx, 0);postInvalidate();if (mLastSelectedIndex != mCenterIndex) {mLastSelectedIndex = mCenterIndex;if (null != mOnWheelItemSelectedListener) {mOnWheelItemSelectedListener.onWheelItemSelected(this, mCenterIndex);}}}/*** limit center index in bounds.** @param center* @return*/private int safeCenter(int center) {if (center < mMinSelectableIndex) {center = mMinSelectableIndex;} else if (center > mMaxSelectableIndex) {center = mMaxSelectableIndex;}return center;}private void refreshCenter(int offsetX) {int offset = (int) (offsetX + mMaxOverScrollDistance);int tempIndex = Math.round(offset / mIntervalDis);tempIndex = safeCenter(tempIndex);if (mCenterIndex == tempIndex) {return;}mCenterIndex = tempIndex;if (null != mOnWheelItemSelectedListener) {mOnWheelItemSelectedListener.onWheelItemChanged(this, mCenterIndex);}}private void refreshCenter() {refreshCenter(getScrollX());}public void selectIndex(int index) {mCenterIndex = index;post(new Runnable() {@Overridepublic void run() {scrollTo((int) (mCenterIndex * mIntervalDis - mMaxOverScrollDistance), 0);invalidate();refreshCenter();}});}public void smoothSelectIndex(int index) {if (!mScroller.isFinished()) {mScroller.abortAnimation();}int deltaIndex = index - mCenterIndex;mScroller.startScroll(getScrollX(), 0, (int) (deltaIndex * mIntervalDis), 0);invalidate();}public int getMinSelectableIndex() {return mMinSelectableIndex;}public void setMinSelectableIndex(int minSelectableIndex) {if (minSelectableIndex > mMaxSelectableIndex) {minSelectableIndex = mMaxSelectableIndex;}mMinSelectableIndex = minSelectableIndex;int afterCenter = safeCenter(mCenterIndex);if (afterCenter != mCenterIndex) {selectIndex(afterCenter);}}public int getMaxSelectableIndex() {return mMaxSelectableIndex;}public void setMaxSelectableIndex(int maxSelectableIndex) {if (maxSelectableIndex < mMinSelectableIndex) {maxSelectableIndex = mMinSelectableIndex;}mMaxSelectableIndex = maxSelectableIndex;int afterCenter = safeCenter(mCenterIndex);if (afterCenter != mCenterIndex) {selectIndex(afterCenter);}}public List<String> getItems() {return mItems;}public void setItems(List<String> items) {if (mItems == null) {mItems = new ArrayList<>();} else {mItems.clear();}mItems.addAll(items);mMarkCount = null == mItems ? 0 : mItems.size();if (mMarkCount > 0) {mMinSelectableIndex = Math.max(mMinSelectableIndex, 0);mMaxSelectableIndex = Math.min(mMaxSelectableIndex, mMarkCount - 1);}mContentRectF.set(0, 0, (mMarkCount - 1) * mIntervalDis, getMeasuredHeight());mCenterIndex = Math.min(mCenterIndex, mMarkCount);calcIntervalDis();invalidate();}public int getSelectedPosition() {return mCenterIndex;}public void setOnWheelItemSelectedListener(OnWheelItemSelectedListener onWheelItemSelectedListener) {mOnWheelItemSelectedListener = onWheelItemSelectedListener;}@Overridepublic boolean onDown(MotionEvent e) {if (!mScroller.isFinished()) {mScroller.forceFinished(false);}mFling = false;if (null != getParent()) {getParent().requestDisallowInterceptTouchEvent(true);}return true;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {playSoundEffect(SoundEffectConstants.CLICK);refreshCenter((int) (getScrollX() + e.getX() - mMaxOverScrollDistance));autoSettle();return true;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {float dis = distanceX;float scrollX = getScrollX();if (scrollX < mMinSelectableIndex * mIntervalDis - 2 * mMaxOverScrollDistance) {dis = 0;} else if (scrollX < mMinSelectableIndex * mIntervalDis - mMaxOverScrollDistance) {dis = distanceX / 4.f;} else if (scrollX > mContentRectF.width() - (mMarkCount - mMaxSelectableIndex - 1) * mIntervalDis) {dis = 0;} else if (scrollX > mContentRectF.width() - (mMarkCount - mMaxSelectableIndex - 1) * mIntervalDis - mMaxOverScrollDistance) {dis = distanceX / 4.f;}scrollBy((int) dis, 0);refreshCenter();return true;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {float scrollX = getScrollX();if (scrollX < -mMaxOverScrollDistance + mMinSelectableIndex * mIntervalDis || scrollX > mContentRectF.width() - mMaxOverScrollDistance - (mMarkCount - 1 - mMaxSelectableIndex) * mIntervalDis) {return false;} else {mFling = true;fling((int) -velocityX, 0);return true;}}@Overridepublic Parcelable onSaveInstanceState() {Parcelable superState = super.onSaveInstanceState();SavedState ss = new SavedState(superState);ss.index = getSelectedPosition();ss.min = mMinSelectableIndex;ss.max = mMaxSelectableIndex;return ss;}@Overridepublic void onRestoreInstanceState(Parcelable state) {SavedState ss = (SavedState) state;super.onRestoreInstanceState(ss.getSuperState());mMinSelectableIndex = ss.min;mMaxSelectableIndex = ss.max;selectIndex(ss.index);requestLayout();}public interface OnWheelItemSelectedListener {void onWheelItemChanged(WheelView wheelView, int position);void onWheelItemSelected(WheelView wheelView, int position);}static class SavedState extends BaseSavedState {public static final Creator<SavedState> CREATOR= new Creator<SavedState>() {public SavedState createFromParcel(Parcel in) {return new SavedState(in);}public SavedState[] newArray(int size) {return new SavedState[size];}};int index;int min;int max;SavedState(Parcelable superState) {super(superState);}private SavedState(Parcel in) {super(in);index = in.readInt();min = in.readInt();max = in.readInt();}@Overridepublic void writeToParcel(Parcel out, int flags) {super.writeToParcel(out, flags);out.writeInt(index);out.writeInt(min);out.writeInt(max);}@Overridepublic String toString() {return "WheelView.SavedState{"+ Integer.toHexString(System.identityHashCode(this))+ " index=" + index + " min=" + min + " max=" + max + "}";}} }

6.attrs.xml:

<?xml version="1.0" encoding="utf-8"?> <resources><declare-styleable name="lwvWheelView"><attr name="lwvHighlightColor" format="color|reference"/><attr name="lwvMarkColor" format="color|reference"/><attr name="lwvMarkTextColor" format="color|reference"/><attr name="lwvIntervalFactor" format="float"/><attr name="lwvMarkRatio" format="float"/><attr name="lwvCursorSize" format="dimension"/><attr name="lwvMarkTextSize" format="dimension"/><attr name="lwvCenterMarkTextSize" format="dimension"/><attr name="lwvAdditionalCenterMark" format="string|reference"/></declare-styleable> </resources>

7.顏色:

<?xml version="1.0" encoding="utf-8"?> <resources><color name="colorPrimary">#333333</color><color name="colorPrimaryDark">#666666</color><color name="colorAccent">#D81B60</color><color name="black">#333</color><color name="gray_line">#888</color> </resources>

?

總結

以上是生活随笔為你收集整理的Android 仿拼多多可水平滚动RecyclerView,自定义滚动条滚动距离的全部內容,希望文章能夠幫你解決所遇到的問題。

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

99久久免费看| 日日爽天天操 | 亚洲成av片人久久久 | 久草视频精品 | 成人av在线直播 | 久久精品网址 | 久久久精品欧美一区二区免费 | 日本高清久久久 | 亚洲成人精品久久 | 少妇视频在线播放 | 国产精品日韩在线 | 色噜噜噜噜| 日本在线视频一区二区三区 | 久久久午夜影院 | 精品久久福利 | 国产精品成人av在线 | 久久久久亚洲精品成人网小说 | 亚洲综合色视频 | 国产高清绿奴videos | 狠狠色狠狠色综合日日92 | 香蕉在线视频播放网站 | 四虎成人免费影院 | 欧美久久久久久久久久 | 亚洲国产精品一区二区久久hs | 日韩三级中文字幕 | 国产精品99久久久久久人免费 | 免费国产黄线在线观看视频 | 日韩三级.com | 免费观看一级视频 | 日韩亚洲国产精品 | 在线国产能看的 | 久久久久日本精品一区二区三区 | 国产99久久久精品 | 欧美日韩一区二区在线观看 | 成年人在线播放视频 | av色图天堂网 | 久久xx视频 | 久久色视频 | 一区二区精品在线观看 | 日日夜夜操av | 日日操夜夜操狠狠操 | av资源中文字幕 | 免费看国产曰批40分钟 | 9热精品| 国产不卡免费视频 | 超碰在线人人97 | 欧美亚洲成人免费 | 日韩在线色 | www.99久久.com | 国产精品都在这里 | 欧美综合在线视频 | 91传媒在线 | 国产精品一码二码三码在线 | 麻豆传媒视频在线播放 | 亚洲精品在线看 | 丁香色综合 | 日本最大色倩网站www | 国产一级电影网 | 欧美在线观看小视频 | 国产中文欧美日韩在线 | 婷婷免费在线视频 | 日韩丝袜 | 成人免费共享视频 | 91看毛片 | 久久激情小说 | 一区二区三区在线不卡 | 五月天婷婷在线观看视频 | 日韩免费三区 | 久久96国产精品久久99漫画 | 91女子私密保健养生少妇 | 在线午夜av | 91黄在线看| 日韩免费| 欧美午夜精品久久久久 | 亚洲国产播放 | 国内精品视频免费 | 狠色在线| 精品国内自产拍在线观看视频 | 最近日本mv字幕免费观看 | 操操操影院 | av免费电影网站 | 国产黄色在线网站 | 怡红院久久 | 天天草综合 | 狠狠躁18三区二区一区ai明星 | 欧美xxxxx在线视频 | 中文字幕乱码电影 | a级片韩国 | 国产永久免费高清在线观看视频 | 九色在线视频 | 欧美日韩一级视频 | 97热视频 | 一本一本久久a久久精品综合妖精 | 91久久精品日日躁夜夜躁国产 | 国产一区在线视频 | 91亚洲精品久久久久图片蜜桃 | 五月开心六月伊人色婷婷 | 玖玖色在线观看 | 色综合久久久久综合99 | 久久久免费少妇 | 久草在线资源观看 | 亚洲女同videos | 成人丝袜 | 久99热| 日韩黄色一区 | 国产又粗又长的视频 | 麻豆成人在线观看 | av在线播放快速免费阴 | 97超碰人人模人人人爽人人爱 | 久久激情视频 | 在线视频一二三 | 天天干夜夜操视频 | 91精品国产综合久久婷婷香蕉 | 伊人国产在线播放 | 国产精品一区二区三区在线 | 国产一级大片免费看 | 成人在线免费av | 色丁香久久 | 中文在线天堂资源 | 伊人久久精品久久亚洲一区 | 在线看国产视频 | 亚洲精品中文在线观看 | 亚洲专区在线 | 91污污视频在线观看 | 国产91学生粉嫩喷水 | 91精品网站 | 日韩成人一级大片 | 欧美日韩精品电影 | av一区在线播放 | 国产福利精品视频 | 91精品伦理| 国产精品igao视频网网址 | 色噜噜在线观看 | av片中文字幕 | 成人午夜性影院 | 91在线影视| 91插插插网站 | av再线观看| 91日韩免费 | 毛片网在线 | 中文字幕欧美日韩va免费视频 | 极品久久久久久久 | 香蕉久草 | 亚洲婷婷免费 | 日日夜夜免费精品 | 国产在线综合视频 | 国产精品女 | a√资源在线 | 色综合天天综合在线视频 | 黄色av一级 | 欧美视频在线观看免费网址 | 91人人插| 亚洲精品国产精品国 | 亚洲天堂网视频在线观看 | 成年人免费电影 | 在线观看视频在线 | 人人干天天射 | 日韩欧美一区二区三区黑寡妇 | 免费观看一区二区 | 国产视频亚洲精品 | av中文字幕网址 | 日本激情中文字幕 | 91久久国产露脸精品国产闺蜜 | 日本大片免费观看在线 | 国产一区视频免费在线观看 | 日韩精品在线免费播放 | 免费日韩一级片 | 在线观看免费黄色 | 欧美亚洲精品在线观看 | 国产美女永久免费 | 午夜影院一级片 | 亚洲国产精品久久久久 | 米奇四色影视 | 国产视频亚洲 | 在线观看视频一区二区三区 | 6699私人影院 | ,午夜性刺激免费看视频 | 国产精品黄 | 美女视频久久久 | 欧美伦理一区二区三区 | 美女精品国产 | 最近免费中文字幕大全高清10 | 久久久久久久久久免费 | 伊人久久在线观看 | 成人亚洲欧美 | 97免费中文视频在线观看 | 日韩动态视频 | 亚洲国产mv | 天天操夜夜干 | 久久久91精品国产 | 天天操网| 91大神精品视频在线观看 | 久久久鲁| 国产人成免费视频 | 国产精品网红直播 | 91亚洲成人| 国产精品麻豆果冻传媒在线播放 | 97人人视频 | 中文字幕在线观看免费高清完整版 | 一区二区三区高清在线 | 亚洲黄色免费观看 | 成人精品一区二区三区中文字幕 | 亚洲精品视频在线观看免费视频 | 国产精品99久久久精品 | 色国产精品一区在线观看 | 五月天久久婷婷 | 久久综合九色综合久99 | 91色国产| 国产免费一区二区三区最新 | 亚州性色 | 亚洲电影一级黄 | 夜色.com| www.看片网站| 久久久久久综合网天天 | 欧美日韩国产一区二区三区在线观看 | 天天操人人要 | 97品白浆高清久久久久久 | 日韩一级电影网站 | 亚洲五月激情 | 日本高清dvd| 色婷婷九月 | 九草视频在线 | 国产午夜精品一区二区三区四区 | 久久国产精品成人免费浪潮 | 国产日产精品一区二区三区四区的观看方式 | 国产美女久久 | 特级西西444www高清大视频 | 国产在线观看 | 久草com| 久草精品在线播放 | 麻豆久久一区二区 | 丁香花五月 | 99久久精品免费看国产麻豆 | 最近高清中文在线字幕在线观看 | 丰满少妇一级片 | 婷婷草 | 日本性生活免费看 | 成人污视频在线观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 91精品国产三级a在线观看 | se视频网址 | 婷婷在线网 | 国产一及片| 黄a在线观看 | 毛片二区| 久久欧美综合 | 91黄视频在线观看 | 国产精品理论在线观看 | 久久国内精品视频 | 国产高清在线视频 | 三级黄色大片在线观看 | 免费的黄色av| 97av在线视频免费播放 | 天天拍天天操 | 97国产电影 | 日本精品久久久久中文字幕 | 精品国产一区二区在线 | 91九色最新地址 | 久久免费的视频 | 在线视频黄 | 国产成人一区二 | 日韩精品在线播放 | 99草视频在线观看 | 天海冀一区二区三区 | 免费在线观看一区二区三区 | 免费久久网站 | 日韩最新av | av在线电影免费观看 | 91av手机在线观看 | 国产伦理精品一区二区 | 免费观看v片在线观看 | 在线观看免费av片 | 成人免费亚洲 | 亚洲欧美日本一区二区三区 | 久久精品亚洲精品国产欧美 | 久久久久久免费视频 | 中文字幕av在线不卡 | 天天操综合网站 | av黄免费看 | 亚洲精品小区久久久久久 | 亚洲精品97| 香蕉视频在线免费 | 欧美精品一区二区性色 | 美国人与动物xxxx | 天天操夜夜操 | 在线亚洲午夜片av大片 | av视屏在线| 在线免费黄 | 亚洲精品动漫在线 | 福利片免费看 | 亚洲婷婷伊人 | 日本天天色 | 午夜国产福利在线观看 | 国产91精品看黄网站 | 欧美久久久久久 | 国产一区免费在线 | 成年人视频在线免费 | 日韩欧美高清不卡 | 国产色女 | 日本h视频在线观看 | 中文字幕一区二区三区精华液 | 久久艹久久 | 日韩精品免费在线观看视频 | 国产色妞影院wwwxxx | 亚洲电影院 | 黄网站免费看 | 综合五月婷婷 | 国产精品国产亚洲精品看不卡 | 蜜臀久久99精品久久久久久网站 | 欧美精品久久久久久久久久白贞 | 91九色在线 | 在线国产一区二区 | 亚洲三级影院 | 亚洲日韩欧美一区二区在线 | 91久草视频 | 国产va精品免费观看 | 国产在线免费av | 91天堂影院 | 婷婷在线看 | a在线免费观看视频 | 成人电影毛片 | 欧美午夜视频在线 | 亚洲九九九在线观看 | 日韩高清成人在线 | 精品婷婷 | 亚洲欧美色婷婷 | 亚洲一区免费在线 | 天天色综合三 | 国产精品91一区 | 亚洲国产视频在线 | 在线观看av黄色 | a黄色影院| 中文字幕乱码电影 | 日本h在线播放 | 久草综合在线观看 | www.国产精品 | 亚洲视频资源在线 | 综合激情婷婷 | 丁香六月欧美 | 国产精品video爽爽爽爽 | 97人人澡人人添人人爽超碰 | 青青河边草免费视频 | 国产精品免费在线播放 | 欧美91视频 | 干综合网 | 麻豆传媒一区二区 | 91精品视频一区二区三区 | 亚洲aⅴ乱码精品成人区 | 五月天亚洲婷婷 | 日韩精品久久一区二区 | 九色视频网 | a极黄色片| av一级片在线观看 | 久久草网 | 亚洲成a人片综合在线 | 久久久国产99久久国产一 | 国产成人精品一区二区在线观看 | 娇妻呻吟一区二区三区 | 91精品网站在线观看 | 中文字幕av播放 | 激情五月五月婷婷 | h视频在线看 | 3d黄动漫免费看 | 中文字幕av在线不卡 | 久久国产精品99精国产 | 国产成人一区二区三区在线观看 | 午夜骚影| 狠狠操狠狠干2017 | 日韩视频 一区 | 婷婷色综 | 在线视频app | 97精品国产手机 | 激情网站免费观看 | 2021久久| 激情综合五月婷婷 | 在线观看的黄色 | 97视频在线观看成人 | 99色在线| 日韩有码专区 | av免费网页| 久久久久久激情 | 日本黄色免费网站 | www色片| 在线国产视频 | 天天综合天天做 | 狠色狠色综合久久 | 精品亚洲午夜久久久久91 | 国产美女网站视频 | 国产剧情在线一区 | 二区三区在线观看 | 婷婷综合伊人 | 亚洲1区 在线 | 久热免费| 国产中文字幕免费 | www久久久久 | 黄色特一级| 欧美一区二区三区激情视频 | 夜夜操网 | 亚洲精品麻豆 | 中文字幕网站视频在线 | 亚洲专区欧美专区 | 免费网站在线观看成人 | 精品久久久久久久久亚洲 | 亚洲电影免费 | 99久久这里有精品 | 国产中文字幕精品 | 中文字幕人成不卡一区 | 国产亚洲综合性久久久影院 | 91麻豆视频 | 亚洲少妇激情 | 夜夜爽88888免费视频4848 | 麻豆传媒一区二区 | 天天干,天天射,天天操,天天摸 | 日韩免费电影在线观看 | 成人av地址 | 一本一本久久a久久精品牛牛影视 | 视频 天天草 | 色偷偷网站视频 | 九九免费在线观看 | 99久久精品国产毛片 | 免费久久片 | 激情五月婷婷激情 | 一区二区欧美在线观看 | 亚洲一区免费在线 | 欧美日韩亚洲一 | 99热高清 | 伊人资源站 | 精品国内自产拍在线观看视频 | 国产黄大片 | 日本公妇在线观看 | 91精品国自产在线观看欧美 | 91精品国产自产老师啪 | 免费精品视频 | 国产日本三级 | 国产精品亚洲人在线观看 | 亚洲欧美偷拍另类 | 日韩毛片在线一区二区毛片 | 久久国产成人午夜av影院潦草 | 在线欧美中文字幕 | 日韩精品不卡 | 奇米导航 | 婷婷在线免费 | 久久免费视频99 | 欧美精品久久久久久久久久久 | 久久国产精品久久精品 | 精品99久久久久久 | 在线观看黄色 | 国产一二区视频 | 久草在线观看 | 在线看黄色av | 亚洲乱码久久久 | 伊人欧美 | 亚洲国产日韩欧美 | 久久久在线视频 | 亚洲欧洲xxxx | 热re99久久精品国产99热 | 玖玖国产精品视频 | 国产精久久 | 一区二区国产精品 | 久久视精品 | 日韩免费视频在线观看 | 69亚洲精品 | 国产一区二区三精品久久久无广告 | 成人亚洲精品国产www | 韩国一区在线 | 亚洲精品小视频 | 久久无码精品一区二区三区 | 婷婷视频导航 | 一本一道波多野毛片中文在线 | 午夜久久久久久久 | 中文字幕亚洲欧美日韩 | 免费av网址在线观看 | 美女黄频视频大全 | 久草在线网址 | 国产精品中文字幕在线播放 | 欧美日本国产在线观看 | 久久艹人人 | 国产亚洲欧美在线视频 | 精品国产视频在线 | 精品视频免费在线 | 色六月婷婷 | 麻豆国产精品va在线观看不卡 | 国产精品免费成人 | 草久电影 | www.久久99| 国产高清在线永久 | 九九热在线视频免费观看 | 日韩中文字幕第一页 | 丁香九月婷婷 | 天天做天天爱天天综合网 | 永久免费观看视频 | 久久久久久久久久久久电影 | 在线观看久久 | 国产精品网址在线观看 | 免费国产ww | 免费视频91蜜桃 | 久久久国产精品一区二区三区 | 2018亚洲男人天堂 | 国产黄色视 | 久久免费国产精品 | 国产精品久久久久高潮 | 黄色软件在线观看免费 | 国产最新精品视频 | 最新午夜 | 久久国产精品99久久人人澡 | 日韩一区二区三区在线观看 | 激情欧美丁香 | 在线播放第一页 | 成人国产精品久久久 | 成年人黄色在线观看 | 在线播放日韩 | www夜夜| 日韩视频中文 | 日韩成人免费在线 | 精品一区二区免费 | 中文字幕免费高清av | 在线国产精品一区 | 日韩大片免费观看 | 成人av电影在线 | 欧美一区二区三区免费观看 | 亚洲精品视频二区 | 国产小视频在线看 | 中文字幕在线免费看线人 | 中国一区二区视频 | 国产一区二区在线视频观看 | 国产黄色大片免费看 | 97超级碰碰 | 亚洲欧美成人综合 | 一区二三国产 | 色播五月激情综合网 | 亚洲一区二区三区四区精品 | 五月婷婷中文字幕 | 天天色综合久久 | 天天色天天射天天干 | 韩国av三级| 成人亚洲网 | 国内精品视频一区二区三区八戒 | 久久精品美女视频网站 | 91专区在线观看 | 黄色免费看片网站 | 黄色av成人在线 | 天天色草| av在线网站观看 | 91精品国产九九九久久久亚洲 | 九九视频这里只有精品 | 人人狠| 81精品国产乱码久久久久久 | 精品久久久久久综合 | 亚洲综合激情 | 91久久国产自产拍夜夜嗨 | 久久国产视屏 | 日韩一三区 | 日韩成人不卡 | 中文字幕在线播放日韩 | 伊人午夜视频 | 日本天天操 | 99久久久久久久久久 | 国产精品白浆 | 精品a在线 | 97精品欧美91久久久久久 | 日韩一区正在播放 | 999久久久国产精品 高清av免费观看 | 99r精品视频在线观看 | 国产一区国产二区在线观看 | 欧美日韩国产二区三区 | 中文字幕91 | 最近日本韩国中文字幕 | 亚洲免费小视频 | av日韩av| 在线观看蜜桃视频 | 欧美在线视频免费 | 亚洲精品日韩在线观看 | 国产精品久久99综合免费观看尤物 | 欧美一级电影片 | 亚洲第一av在线 | 久久精品国产一区 | 国产毛片在线 | av夜夜操| 亚洲精品1区2区3区 超碰成人网 | 久久免费久久 | 中文字幕亚洲欧美日韩2019 | 高潮毛片无遮挡高清免费 | 国产精品精品国产 | 一个色综合网站 | 国偷自产视频一区二区久 | 成人在线观看网址 | 日本久久综合网 | 美女精品网站 | 美女黄频在线观看 | 国产自产高清不卡 | 欧美一级免费在线 | 99热手机在线 | 又色又爽又黄高潮的免费视频 | 国产91精品欧美 | a级一a一级在线观看 | 激情五月播播久久久精品 | 日韩不卡高清视频 | 狠狠色丁香婷婷综合 | 天天综合成人 | 亚洲欧洲精品视频 | www.香蕉视频在线观看 | 国产精品一区二区三区在线看 | 粉嫩av一区二区三区四区五区 | 久久久久影视 | av三级在线免费观看 | 99国产精品| 91夜夜夜| 成人va天堂 | 国产一区二区视频在线播放 | 99热精品国产 | 日韩在线观看一区 | 五月婷婷丁香色 | 成人免费av电影 | 在线国产一区二区 | 日本激情动作片免费看 | 成人性生交大片免费观看网站 | 在线电影播放 | 国产一级精品视频 | 国产在线观看中文字幕 | 久久国产精品99久久久久久丝袜 | 综合伊人久久 | 免费观看丰满少妇做爰 | 国内精品亚洲 | 国产中文在线播放 | 亚洲欧美激情精品一区二区 | 亚洲视频2 | av千婊在线免费观看 | 久久久精品欧美 | 国产精品一区二区三区四区在线观看 | 成 人 黄 色 免费播放 | 天天射天天操天天 | 婷婷六月综合亚洲 | 最新中文字幕在线资源 | 亚洲日b视频 | 色婷婷五 | 久久一视频| 一级黄色av | 中文字幕一区二区在线播放 | 国产中文字幕一区二区 | 精品一区二区亚洲 | 久久夜夜操 | 二区三区中文字幕 | 日本黄色片一区二区 | 中文字幕亚洲欧美日韩2019 | 五月激情久久 | 国产午夜三级一区二区三桃花影视 | 日本在线中文在线 | 午夜精品久久久久久久久久久久久久 | 欧美一级性生活 | 中文字幕亚洲高清 | 成年人免费看片网站 | 成人国产精品电影 | 一区二区三区免费在线播放 | 国产在线精品视频 | 久久精品久久久久电影 | 日韩精品一区二区在线 | 日批在线看 | 中文字幕大全 | 日韩av影视在线观看 | 最近中文字幕第一页 | 国产无遮挡又黄又爽在线观看 | 999精品 | 日韩在线视频网址 | 亚洲影音先锋 | 国产精品99免费看 | 精品一区三区 | 九九在线国产视频 | 亚洲激情网站免费观看 | 狠狠干.com | 国产在线免费 | 97国产大学生情侣白嫩酒店 | 日韩精品一区二区三区丰满 | 国产在线第三页 | 国产精品免费人成网站 | 中文字幕国产视频 | 国产视频亚洲视频 | 伊人一级| 男女全黄一级一级高潮免费看 | 福利视频| 日韩在线视频免费播放 | 亚洲传媒在线 | 精品国产乱码 | 在线观看国产91 | 在线成人免费电影 | 波多野结衣久久资源 | 久久论理 | 国产原创中文在线 | 日韩在线电影一区二区 | 丁香激情网 | 久久久这里有精品 | 一区二区三区免费在线观看 | 免费在线观看av网址 | 色香蕉在线 | 午夜久久视频 | 国产成人精品一区二区在线 | 国产午夜精品免费一区二区三区视频 | 亚洲精品欧美成人 | 久久久www成人免费精品张筱雨 | 亚洲精品2区 | 婷婷色站 | 手机在线永久免费观看av片 | 狠狠狠色丁香婷婷综合久久88 | 蜜桃视频在线视频 | 欧美在线一二区 | 日本最新高清不卡中文字幕 | av女优中文字幕在线观看 | 在线韩国电影免费观影完整版 | 狠狠天天 | 日韩在线资源 | 久久免费精品视频 | 成人动漫一区二区 | 精品国模一区二区 | av免费网页 | 精产嫩模国品一二三区 | 婷婷精品在线 | 99在线观看免费视频精品观看 | 国产日韩在线一区 | 韩国av免费 | 超碰在线公开 | 99热在线观看免费 | 美腿丝袜av| 成人av中文字幕在线观看 | 最新日本中文字幕 | 日本九九视频 | 在线观看国产高清视频 | 亚洲 中文 在线 精品 | 免费看国产a | 国内久久视频 | 五月婷婷六月综合 | 色婷丁香 | 亚一亚二国产专区 | 免费电影一区二区三区 | 国产精品久久久久一区二区 | 日韩在线观看不卡 | 国产精品一区二区在线看 | 久久九九免费视频 | 国产一级久久久 | 黄色资源在线观看 | 99在线播放 | 日韩aⅴ视频 | 国产成人av片 | 亚洲第一区在线播放 | 国产一区二区不卡在线 | 久久99国产精品免费 | 欧美a级成人淫片免费看 | 日韩中文在线播放 | 96av在线视频 | 偷拍精品一区二区三区 | 欧美做受高潮 | 中文字幕在线观看一区二区三区 | 在线视频a | 中文字幕在线观看完整 | 在线观看一区 | 夜夜高潮夜夜爽国产伦精品 | 欧美国产大片 | 日日爱999| 精品在线一区二区三区 | 国产精品成人一区二区 | 国产一级片直播 | 欧美激情精品久久久久久免费 | 狠狠操.com| 免费 在线 中文 日本 | 欧美射射射| 手机在线永久免费观看av片 | www.五月婷婷.com | 99国产精品久久久久老师 | 在线免费观看的av | 亚洲电影第一页av | 国产一区欧美在线 | 日韩二区在线 | 欧美久久久久久久久中文字幕 | 激情图片久久 | 国产成人性色生活片 | 97超碰在线人人 | 国产韩国日本高清视频 | 97在线成人 | 天天想夜夜操 | 婷婷丁香av | 中文字幕日韩免费视频 | 久草在线视频在线观看 | 成人小视频在线 | 一级黄色大片 | 99在线精品免费视频九九视 | 久久国产精品一区二区 | 天天激情天天干 | 欧美一区二区在线刺激视频 | 国产精品中文字幕在线播放 | 黄色小说免费观看 | 蜜臀av一区| 久久久久久久看片 | 国产成人av福利 | 中文字幕国语官网在线视频 | 久久精国产 | 免费人成在线观看网站 | 色婷婷国产精品 | 黄色网在线免费观看 | 四虎国产精品免费观看视频优播 | 日韩二区在线播放 | 91私密视频 | 午夜天天操 | 国产成人精品在线观看 | 九九热国产视频 | 久久精品一区二区三区视频 | www久草| 中文字幕观看av | 日韩高清国产精品 | 久久精品久久久精品美女 | 五月天亚洲婷婷 | 国产精品视频免费 | 天天操福利视频 | 欧美aaa视频 | 天天干天天看 | 一区二区三区免费在线播放 | 欧美视频日韩视频 | 久久国语露脸国产精品电影 | 亚洲一区二区三区精品在线观看 | 久久久久久久久久影院 | 成人手机在线视频 | 午夜在线国产 | 奇米影视777影音先锋 | 99这里只有精品视频 | 久久精品中文视频 | 久久99热精品 | 精品国内自产拍在线观看视频 | 欧美日本啪啪无遮挡网站 | 国产中文字幕视频 | 国产视频资源在线观看 | 国产97av| 精品国产免费一区二区三区五区 | 99久久久久免费精品国产 | 91成人精品一区在线播放69 | 日韩精品中文字幕在线观看 | 丁香婷婷综合色啪 | 亚洲精品乱码久久久久久9色 | av 一区二区三区四区 | 99精品热视频只有精品10 | 日本中文在线播放 | 国产亚洲精品久久久久秋 | 91黄视频在线 | 色99之美女主播在线视频 | 欧美国产高清 | 午夜精品久久久久久久久久久 | 亚洲精品久久久久久久不卡四虎 | 婷婷四房综合激情五月 | 怡春院av| 五月天久久精品 | 久久久免费 | 免费观看福利视频 | 久青草电影 | 国产精品自产拍在线观看网站 | 国产成人一区二区三区免费看 | 免费久久网站 | 久久国产精品久久久 | 久久综合电影 | 国产精品一区二区三区免费看 | 色综合天天综合 | 五月婷av | 天天射天天干天天操 | 国产精品xxxx18a99 | 久草视频在线免费看 | 亚洲人人av| 国产亚洲久一区二区 | 国产精品女人久久久 | 天天操天天干天天爽 | 国产亚洲亚洲 | 色综合久久五月 | 夜夜视频欧洲 | 手机av永久免费 | 天天操天天干天天爽 | 国产亚洲日本 | 亚洲女欲精品久久久久久久18 | 免费看片黄色 | 天天射天天爱天天干 | 免费看的黄色录像 | 国产亚洲免费的视频看 | 免费看国产视频 | avwww在线| 在线看的毛片 | av在线在线 | 久久黄色小说 | 在线观看免费高清视频大全追剧 | 成人免费共享视频 | 国产一区二区不卡在线 | 免费看片网站91 | 欧美国产一区在线 | 91在线麻豆| 亚洲精品综合一二三区在线观看 | 91人人干| 婷婷草 | 中文字幕久久久精品 | 欧美精品久久人人躁人人爽 | 亚洲最新精品 | 亚洲精品国 | 婷婷亚洲五月色综合 | 91插插插免费视频 | 欧美日韩一二三四区 | 婷婷六月色| 国产高清视频在线播放一区 | 日韩一区在线免费观看 | 超碰在线网| 麻豆91在线观看 | 男女激情麻豆 | 麻豆视频免费网站 | 精品播放| 国产精品电影一区 | 粉嫩一二三区 | 欧美综合色 | 九九视频网站 | 久久网站免费 | 在线观看韩日电影免费 | 亚洲第一香蕉视频 | 国产拍揄自揄精品视频麻豆 | 欧美日韩aaaa | 91久久精品一区 | 日日夜夜综合网 | www黄色av| 日p视频| 黄色三级网站在线观看 | 99国产精品久久久久久久久久 | 国产日韩精品一区二区在线观看播放 | 欧美精品在线一区二区 | 在线观看免费版高清版 | 日批视频在线播放 | 免费又黄又爽视频 | 日本午夜在线亚洲.国产 | 欧美色久 | 久国产在线播放 | 97成人在线 | 久久久久久久99精品免费观看 | 精品久久中文 | 99久久99久久| 99热国产在线 | 99视频+国产日韩欧美 | 国产福利一区二区三区视频 | a精品视频 | 中文字幕乱偷在线 | 精品国产一区二区三区免费 | 亚洲精品国产品国语在线 | 久久综合狠狠综合 | 午夜视频二区 | 欧美一二三区播放 | 久久久国产一区 | 青青河边草免费观看完整版高清 | 亚洲闷骚少妇在线观看网站 | www免费看片com | 欧美日韩国产综合一区二区 | 亚洲一区精品二人人爽久久 | 在线观看视频91 | 亚州中文av | 日日夜夜狠狠 | 久久大香线蕉app | 91精品国自产在线观看欧美 | 在线视频 国产 日韩 | 精品在线观看一区二区 | 国产精品久久久久久久久久久久午 | 天天操操操操操 | 久热av在线| 久久久久久网址 | 久久久亚洲国产精品麻豆综合天堂 | 亚洲区另类春色综合小说校园片 | 免费视频xnxx com | 国精产品999国精产品岳 | av在线免费不卡 | 国产亚州av | 久久免费电影 | 精品国产99 | 就要干b | 亚洲高清视频在线观看 | 在线观看中文字幕一区二区 | 免费成人结看片 | 久艹视频在线观看 | 婷婷精品 | 毛片网站在线观看 | 狠狠色丁香婷婷综合视频 | 午夜av免费观看 | 99r在线精品 | 色香蕉网 | 日韩在线观看你懂的 | av电影中文| 天天干夜夜夜操天 | 国产高清在线观看 | 91免费观看网站 | 亚洲女在线 | 亚洲免费av在线 | 国产精品久久久久永久免费看 | 色婷婷国产| 九九久久成人 | 免费精品久久久 | 日韩精品91偷拍在线观看 | 中文字幕文字幕一区二区 | 成人av免费网站 | 99久久精品国产系列 | 在线观看岛国片 | 视频成人永久免费视频 | 国产精品高潮呻吟久久av无 | 五月天久久久久 | 高清不卡一区二区三区 | 三级av在线播放 |