国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Android使用代碼實(shí)現(xiàn)一個(gè)選詞(拖拽)填空題

共 16408字,需瀏覽 33分鐘

 ·

2021-08-23 12:47

在之前文章Android使用代碼實(shí)現(xiàn)一個(gè)填空題中,我們學(xué)習(xí)了如何實(shí)現(xiàn)一個(gè)填空題,今天繼續(xù)接著上一篇文章的節(jié)奏,學(xué)習(xí)一下如何實(shí)現(xiàn)一個(gè)選詞填空題,由于本文中用到了一些上篇文章中的知識(shí)點(diǎn),還沒有看過上篇文章的同學(xué)可以了解一下。

首先看下效果圖:


學(xué)習(xí)一些基礎(chǔ)知識(shí)

選詞填空題有一個(gè)很重要的功能就是拖拽,我們先來學(xué)習(xí)一下如何對(duì)View進(jìn)行拖拽操作,寫個(gè)簡(jiǎn)單的Demo來學(xué)習(xí)下:
public class DragActivity extends BaseActivity implements View.OnDragListener {
@Bind(R.id.tv_tip) TextView tvTip; @Bind(R.id.rl_container) RelativeLayout rlContainer;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_drag); ButterKnife.bind(this);
// 目標(biāo)區(qū)域設(shè)置拖拽事件監(jiān)聽 rlContainer.setOnDragListener(this); }
@OnTouch(R.id.iv_icon) public boolean onTouch(View v) { ClipData.Item item = new ClipData.Item("我來了"); ClipData data = new ClipData(null, new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}, item); v.startDrag(data, new View.DragShadowBuilder(v), null, 0); return true; }
@Override public boolean onDrag(View v, DragEvent event) { final int action = event.getAction(); switch (action) { case DragEvent.ACTION_DRAG_STARTED: // 拖拽開始 Log.i("拖拽事件", "拖拽開始"); return event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);
case DragEvent.ACTION_DRAG_ENTERED: // 被拖拽View進(jìn)入目標(biāo)區(qū)域 Log.i("拖拽事件", "被拖拽View進(jìn)入目標(biāo)區(qū)域"); return true;
case DragEvent.ACTION_DRAG_LOCATION: // 被拖拽View在目標(biāo)區(qū)域移動(dòng) Log.i("拖拽事件", "被拖拽View在目標(biāo)區(qū)域移動(dòng)___X:" + event.getX() + "___Y:" + event.getY()); tvTip.setText("X:" + event.getX() + " Y:" + event.getY()); return true;
case DragEvent.ACTION_DRAG_EXITED: // 被拖拽View離開目標(biāo)區(qū)域 Log.i("拖拽事件", "被拖拽View離開目標(biāo)區(qū)域"); return true;
case DragEvent.ACTION_DROP: // 放開被拖拽View Log.i("拖拽事件", "放開被拖拽View"); // 釋放拖放陰影,并獲取移動(dòng)數(shù)據(jù) ClipData.Item item = event.getClipData().getItemAt(0); String content = item.getText().toString(); Toast.makeText(this, content, Toast.LENGTH_SHORT).show(); return true;
case DragEvent.ACTION_DRAG_ENDED: // 拖拽完成 Log.i("拖拽事件", "拖拽完成"); return true;
default: break; }
return false; }}


看下效果:



看下打印信息:


首先給被拖拽View設(shè)置一個(gè)觸摸事件,在onTouch方法中定義一個(gè)ClipData對(duì)象,傳入文本類型的數(shù)據(jù)“我來了”,當(dāng)觸摸被拖拽View時(shí)調(diào)用View的startDrag方法開始移動(dòng)View,此時(shí)移動(dòng)的是被拖拽View的“影子”。

View可以移動(dòng)了,還需要為它設(shè)置一個(gè)目標(biāo)區(qū)域,調(diào)用目標(biāo)區(qū)域View的setOnDragListener方法設(shè)置拖拽事件的監(jiān)聽,實(shí)現(xiàn)onDrag方法,在ACTION_DRAG_STARTED(拖拽開始)時(shí)判斷當(dāng)前接收的是不是文件類型的數(shù)據(jù),如果不是則返回false,不再響應(yīng)拖拽事件,在ACTION_DROP(放開被拖拽View)時(shí),釋放拖拽陰影,并獲取傳遞過來的數(shù)據(jù),通過Toast顯示出來。


實(shí)現(xiàn)

首先初始化一些數(shù)據(jù)

public class DragFillBlankView extends RelativeLayout implements View.OnDragListener,        View.OnLongClickListener {
private TextView tvContent; private LinearLayout llOption; // 初始數(shù)據(jù) private String originContent; // 初始答案范圍集合 private List<AnswerRange> originAnswerRangeList; // 填空題內(nèi)容 private SpannableStringBuilder content; // 選項(xiàng)列表 private List<String> optionList; // 答案范圍集合 private List<AnswerRange> answerRangeList; // 答案集合 private List<String> answerList; // 選項(xiàng)位置 private int optionPosition; // 一次拖拽填空是否完成 private boolean isFillBlank;
public DragFillBlankView(Context context) { this(context, null); }
public DragFillBlankView(Context context, AttributeSet attrs) { this(context, attrs, 0); }
public DragFillBlankView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); }
private void initView() { LayoutInflater inflater = LayoutInflater.from(getContext()); inflater.inflate(R.layout.layout_drag_fill_blank, this);
tvContent = (TextView) findViewById(R.id.tv_content); llOption = (LinearLayout) findViewById(R.id.ll_option); }
...}


定義一個(gè)設(shè)置數(shù)據(jù)的方法,供外部調(diào)用

/** * 設(shè)置數(shù)據(jù) * * @param originContent   源數(shù)據(jù) * @param optionList      選項(xiàng)列表 * @param answerRangeList 答案范圍集合 */public void setData(String originContent, List<String> optionList, List<AnswerRange> answerRangeList) {    if (TextUtils.isEmpty(originContent) || optionList == null || optionList.isEmpty()            || answerRangeList == null || answerRangeList.isEmpty()) {        return;    }
// 初始數(shù)據(jù) this.originContent = originContent; // 初始答案范圍集合 this.originAnswerRangeList = new ArrayList<>(); this.originAnswerRangeList.addAll(answerRangeList); // 獲取課文內(nèi)容 this.content = new SpannableStringBuilder(originContent); // 選項(xiàng)列表 this.optionList = optionList; // 答案范圍集合 this.answerRangeList = answerRangeList;
// 避免重復(fù)創(chuàng)建拖拽選項(xiàng) if (llOption.getChildCount() < 1) { // 拖拽選項(xiàng)列表 List<Button> itemList = new ArrayList<>(); for (String option : optionList) { Button btnAnswer = new Button(getContext()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(0, 0, dp2px(10), 0); btnAnswer.setLayoutParams(params); btnAnswer.setBackgroundColor(Color.parseColor("#4DB6AC")); btnAnswer.setTextColor(Color.WHITE); btnAnswer.setText(option); btnAnswer.setOnLongClickListener(this); itemList.add(btnAnswer); }
// 顯示拖拽選項(xiàng) for (int i = 0; i < itemList.size(); i++) { llOption.addView(itemList.get(i)); } } else { // 不顯示已經(jīng)填空的選項(xiàng) for (int i = 0; i < llOption.getChildCount(); i++) { Button button = (Button) llOption.getChildAt(i); String option = button.getText().toString(); if (!answerList.isEmpty() && answerList.contains(option)) { button.setVisibility(INVISIBLE); } else { button.setVisibility(VISIBLE); } } }
// 設(shè)置下劃線顏色 for (AnswerRange range : this.answerRangeList) { ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#4DB6AC")); content.setSpan(colorSpan, range.start, range.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); }
// 答案集合 answerList = new ArrayList<>(); for (int i = 0; i < answerRangeList.size(); i++) { answerList.add(""); }
// 設(shè)置填空處點(diǎn)擊事件 for (int i = 0; i < this.answerRangeList.size(); i++) { AnswerRange range = this.answerRangeList.get(i); BlankClickableSpan blankClickableSpan = new BlankClickableSpan(i); content.setSpan(blankClickableSpan, range.start, range.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); }
// 填空處設(shè)置觸摸事件 tvContent.setMovementMethod(new TouchLinkMovementMethod()); tvContent.setText(content); tvContent.setOnDragListener(this);}


首先初始化一些全局?jǐn)?shù)據(jù),這個(gè)稍后會(huì)用到,然后創(chuàng)建拖拽選項(xiàng),為了避免重復(fù)創(chuàng)建選項(xiàng),先判斷選項(xiàng)是否已經(jīng)創(chuàng)建過了,如果已經(jīng)創(chuàng)建過了,則把已經(jīng)填空的選項(xiàng)隱藏,然后接下來的邏輯就和普通填空題一樣了,代碼里已經(jīng)寫了注釋,不再多說。

重點(diǎn)看下填空處設(shè)置觸摸事件這里,由于拖拽是觸摸事件而不是點(diǎn)擊事件,在這里就需要定義一個(gè)TouchLinkMovementMethod來響應(yīng)觸摸事件,最后對(duì)填空題區(qū)域進(jìn)行拖拽監(jiān)聽,看下TouchLinkMovementMethod類:
public class TouchLinkMovementMethod extends LinkMovementMethod {
@Override public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) { int x = (int) event.getX(); int y = (int) event.getY();
x -= widget.getTotalPaddingLeft(); y -= widget.getTotalPaddingTop(); x += widget.getScrollX(); y += widget.getScrollY();
Layout layout = widget.getLayout(); int line = layout.getLineForVertical(y); int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); if (link.length != 0) { link[0].onClick(widget); return true; } else { Selection.removeSelection(buffer); } }
return super.onTouchEvent(widget, buffer, event); }}


當(dāng)手指按下的時(shí)候,回調(diào)ClickableSpan的onClick方法,并且不再響應(yīng)點(diǎn)擊事件。


拖拽開始

@Overridepublic boolean onLongClick(View v) {    startDrag(v);    return true;}
/** * 開始拖拽 * * @param v 當(dāng)前對(duì)象 */private void startDrag(View v) { // 選項(xiàng)內(nèi)容 String optionContent = ((Button) v).getText().toString(); // 記錄當(dāng)前答案選項(xiàng)的位置 optionPosition = getOptionPosition(optionContent); // 開始拖拽后在列表中隱藏答案選項(xiàng) v.setVisibility(INVISIBLE);
ClipData.Item item = new ClipData.Item(optionContent); ClipData data = new ClipData(null, new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}, item); v.startDrag(data, new DragShadowBuilder(v), null, 0);}
/** * 獲取選項(xiàng)位置 * * @param option 選項(xiàng)內(nèi)容 * @return 選項(xiàng)位置 */private int getOptionPosition(String option) { for (int i = 0; i < llOption.getChildCount(); i++) { Button btnOption = (Button) llOption.getChildAt(i); if (btnOption.getText().toString().equals(option)) { return i; } } return 0;}


在初始化拖拽選項(xiàng)時(shí),我們?yōu)槊總€(gè)Button都設(shè)置了一個(gè)長(zhǎng)按監(jiān)聽事件,下面來看看它是如何工作的,首先獲取到當(dāng)前拖拽選項(xiàng)上的答案,作為參數(shù)進(jìn)行傳遞,然后記錄選項(xiàng)的位置,這個(gè)是為了當(dāng)拖拽未完成時(shí),重新顯示選項(xiàng)用的,最后在列表中隱藏當(dāng)前拖拽的選項(xiàng)?,F(xiàn)在選項(xiàng)已經(jīng)可以移動(dòng)了,還記得在設(shè)置數(shù)據(jù)的時(shí)候我們?yōu)樘羁疹}區(qū)域設(shè)置了拖拽監(jiān)聽,看下它是如何進(jìn)行響應(yīng)的:
@Overridepublic boolean onDrag(View v, DragEvent event) {    final int action = event.getAction();    switch (action) {        case DragEvent.ACTION_DRAG_STARTED: // 拖拽開始            return event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);
case DragEvent.ACTION_DRAG_ENTERED: // 被拖拽View進(jìn)入目標(biāo)區(qū)域 return true;
case DragEvent.ACTION_DRAG_LOCATION: // 被拖拽View在目標(biāo)區(qū)域移動(dòng) return true;
case DragEvent.ACTION_DRAG_EXITED: // 被拖拽View離開目標(biāo)區(qū)域 return true;
case DragEvent.ACTION_DROP: // 放開被拖拽View int position = 0;
// 獲取TextView的Layout對(duì)象 Layout layout = tvContent.getLayout();
// 當(dāng)前x、y坐標(biāo) float currentX = event.getX(); float currentY = event.getY();
// 如果拖拽答案沒有進(jìn)行填空則return boolean isContinue = false;
for (int i = 0; i < answerRangeList.size(); i++) { AnswerRange range = answerRangeList.get(i);
// 獲取TextView中字符坐標(biāo) Rect bound = new Rect(); int line = layout.getLineForOffset(range.start); layout.getLineBounds(line, bound);
// 字符頂部y坐標(biāo) int yAxisTop = bound.top - dp2px(10); // 字符底部y坐標(biāo) int yAxisBottom = bound.bottom + dp2px(5); // 字符左邊x坐標(biāo) float xAxisLeft = layout.getPrimaryHorizontal(range.start) - dp2px(10); // 字符右邊x坐標(biāo) float xAxisRight = layout.getSecondaryHorizontal(range.end) + dp2px(10);
if (xAxisRight > xAxisLeft) { // 填空在一行 if (currentX > xAxisLeft && currentX < xAxisRight && currentY < yAxisBottom && currentY > yAxisTop) { position = i; isContinue = true; break; } } else { // 跨行填空 if ((currentX > xAxisLeft || currentX < xAxisRight) && currentY < yAxisBottom && currentY > yAxisTop) { position = i; isContinue = true; break; } } }
if (!isContinue) { return true; }
// 釋放拖放陰影,并獲取移動(dòng)數(shù)據(jù) ClipData.Item item = event.getClipData().getItemAt(0); String answer = item.getText().toString();
// 重復(fù)拖拽,在答案列表中顯示原答案 String oldAnswer = answerList.get(position); if (!TextUtils.isEmpty(oldAnswer)) { llOption.getChildAt(getOptionPosition(oldAnswer)).setVisibility(VISIBLE); }
// 填寫答案 fillAnswer(answer, position); isFillBlank = true; return true;
case DragEvent.ACTION_DRAG_ENDED: // 拖拽完成 if (!isFillBlank) { llOption.getChildAt(optionPosition).setVisibility(VISIBLE); } else { isFillBlank = false; } return true;
default: break; }
return false;}


如何才能判斷拖拽選項(xiàng)是否到達(dá)了某一個(gè)填空處呢?別擔(dān)心,在TextView中我們可以獲取到每一個(gè)字符的坐標(biāo),當(dāng)放開拖拽選項(xiàng)的時(shí)候,判斷一下是不是處于某一個(gè)填空區(qū)域就大功告成了,別忘了還有填空處跨行的問題需要特殊處理一下。

到達(dá)指定位置后,我們就要把選項(xiàng)中的答案填到題目中了,接下來該輪到fillAnswer方法大顯身手了:
/** * 填寫答案 * * @param answer   當(dāng)前填空處答案 * @param position 填空位置 */private void fillAnswer(String answer, int position) {    answer = " " + answer + " ";
// 替換答案 AnswerRange range = answerRangeList.get(position); content.replace(range.start, range.end, answer);
// 更新當(dāng)前的答案范圍 AnswerRange currentRange = new AnswerRange(range.start, range.start + answer.length()); answerRangeList.set(position, currentRange);
// 答案設(shè)置下劃線 content.setSpan(new UnderlineSpan(), currentRange.start, currentRange.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 將答案添加到集合中 answerList.set(position, answer.replace(" ", ""));
// 更新內(nèi)容 tvContent.setText(content);
for (int i = 0; i < answerRangeList.size(); i++) { if (i > position) { // 獲取下一個(gè)答案原來的范圍 AnswerRange oldNextRange = answerRangeList.get(i); int oldNextAmount = oldNextRange.end - oldNextRange.start; // 計(jì)算新舊答案字?jǐn)?shù)的差值 int difference = currentRange.end - range.end;
// 更新下一個(gè)答案的范圍 AnswerRange nextRange = new AnswerRange(oldNextRange.start + difference, oldNextRange.start + difference + oldNextAmount); answerRangeList.set(i, nextRange); } }}


首先把填空處的下劃線或舊答案替換成新答案,然后更新一下當(dāng)前的答案范圍,由于下劃線已經(jīng)被答案替換了,所以需要為答案設(shè)置一條下劃線,最后把答案更新到集合中,這樣一個(gè)填空就完成了。

But,當(dāng)一個(gè)填空處的答案范圍改變后,后面所有的填空處答案范圍都要跟著改變,所以還需要再更新一下后面填空處的答案范圍。首先獲取下一個(gè)答案原來的范圍,計(jì)算一下需要向前或向后移動(dòng)的距離,然后更新一下答案范圍就可以了。

在效果圖中我們可以看到,當(dāng)填空完成后,觸摸填空處還可以繼續(xù)拖拽的,繼續(xù)往下看:


/** * 觸摸事件 */class BlankClickableSpan extends ClickableSpan {
private int position;
public BlankClickableSpan(int position) { this.position = position; }
@Override public void onClick(final View widget) { // 顯示原有答案 String oldAnswer = answerList.get(position); if (!TextUtils.isEmpty(oldAnswer)) { answerList.set(position, ""); updateAnswer(answerList); startDrag(llOption.getChildAt(getOptionPosition(oldAnswer))); } }
@Override public void updateDrawState(TextPaint ds) { // 不顯示下劃線 ds.setUnderlineText(false); }}
/** * 更新答案 * * @param answerList 答案列表 */public void updateAnswer(List<String> answerList) { // 重新初始化數(shù)據(jù) setData(originContent, optionList, originAnswerRangeList);
// 重新填寫已經(jīng)存在的答案 if (answerList != null && !answerList.isEmpty()) { for (int i = 0; i < answerList.size(); i++) { String answer = answerList.get(i); if (!TextUtils.isEmpty(answer)) { fillAnswer(answer, i); } } }}


當(dāng)觸摸填空處時(shí),如果此填空處已經(jīng)填寫了答案,則調(diào)用updateAnswer方法把當(dāng)前填空處的答案清除,然后調(diào)用startDrag方法開始進(jìn)行拖拽。


最后看下如何設(shè)置數(shù)據(jù)

public class MainActivity extends AppCompatActivity {
@BindView(R.id.dfbv_content) DragFillBlankView dfbvContent;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this);
initData(); }
private void initData() { String content = "紛紛揚(yáng)揚(yáng)的________下了半尺多厚。天地間________的一片。我順著________工地走了四十多公里," + "只聽見各種機(jī)器的吼聲,可是看不見人影,也看不見工點(diǎn)。一進(jìn)靈官峽,我就心里發(fā)慌。";
// 選項(xiàng)集合 List<String> optionList = new ArrayList<>(); optionList.add("白茫茫"); optionList.add("霧蒙蒙"); optionList.add("鐵路"); optionList.add("公路"); optionList.add("大雪");
// 答案范圍集合 List<AnswerRange> rangeList = new ArrayList<>(); rangeList.add(new AnswerRange(5, 13)); rangeList.add(new AnswerRange(23, 31)); rangeList.add(new AnswerRange(38, 46));
dfbvContent.setData(content, optionList, rangeList); }}


源碼地址:

https://github.com/alidili/Demos/tree/master/DragFillBlankQuestionDemo


到這里就結(jié)束啦。
瀏覽 50
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 国产AAA片| 99免费热视频| 国产精品HongKong麻豆| 婷婷99| 波多野结衣日韩| 人人草人人舔| 欧美在线看片| 一本到在线观看午夜剧场| 久久亚洲成人| 婷婷五月天综合| 最新av资源| 日韩AV毛片| 久久艹逼| 成人爽爽视频| 豆花视频在线免费观看| 精品国产午夜福利| 约操少妇| 国产成人一区二区| 亚洲青草| 日韩高清无码一区二区三区| 囯产精品久久久| 91嫖妓站街埯店老熟女| 日操操| 大香蕉一区二区| 99精品视频在线观看免费| 欧美黄片免费在线观看| 日韩精品免费在线观看| 大香蕉免费| 牛牛无码| 中国人妻HDbute熟睡| 国产精品国产自产拍高清AV| 手机在线看A片| 成人18视频| 大地资源第三页在线观看免费播放最新 | 69久久成人精品| 亚洲国产av一区| 淫荡少妇美红久久久久久久久久| 嫩草av| 丁香婷婷一区二区三区| 国产精品欧美一区二区三区苍井空 | 国精品无码A区一区二区| 中文字幕一区二区三区人妻在线视频 | 国产又爽又黄免费网站在| 精品国内视频| 久久久视频6r| 在线观看视频免费无码| 国产P片内射天涯海角| 一区二区三区日韩| 无码h| 成人免费A片在线观看直播96| 99久久人妻精品免费二区| av久| 女侠吕四娘第二部| 影音先锋一区二区三区| 久草这里只有精品| 久久亚洲AV| 色老板最新网址| 四虎A片| 日本V片| 麻豆AV片| AV黑人| 免费观看一级黄片| 人妻体体内射精一区二区| 人人操人人干人人操| 久久大香蕉| 一级片免费| 无码一区在线观看| 九九无码视频| 乱子伦】国产精品| av资源在线播放| 韩国无码高清视频| 91国产免费视频| 无码人妻丰满熟妇区毛片蜜桃麻豆| 久久中文字幕综合| 99热| 久操播放器| 日韩综合在线| 婷婷久久久| 大肉大捧一进一出两腿| 中文字幕一区二区三区精华液| 日韩精品电影| 精品无码免费| 狠狠视频| 尤物网在线| 狼友视频在线免费观看| 91免费高清视频| 欧美国产日韩在线观看| 中文成人无字幕乱码精品区| 天天视频国产| 在线免费看黄网站| 亚洲小视频在线播放| www.五月天| 久草视频在线免费播放| 美女大吊,网站视频| 亚洲大哥天天干| 亚洲狼人| 黄色视频| 性感91影院| 99视频精品| 91成人做爰A片| 黄色成人在线观看| 北条麻妃无码在线观看| 亚洲有码中文字幕| 欧美成人18| 加勒比日日综合| 欧美中文字幕| 伊人成人视频在线观看| 中文字幕视频一区| 91re| 亚洲一级二级片| 欧美精产国品一| 日韩精品毛片一区二区视频免费| 亚洲精品鲁一鲁一区二区三区| 精品乱子伦一区二区三区下载| 激情啪啪网站| 一夲道无码专区av无码A片| 午夜九九| 日本黄色视频在线| 操逼动漫| 一级日韩| 久久精品电影| 亚洲日本三级片| 美女大吊,网站视频| 精品国产乱码一区二区| 亚洲激情视频网站| 亚洲AV无码精品岛国| 色婷婷欧美在线播放内射| 在线中文AV| 国产视频精品一区二区三区| 91.xxxx| 久久久久久久网| 午夜福利视频3000| 日韩免费黄色视频| 激情五月天黄色| 蜜桃视频在线入口www| 内射在线| xxxx国产| 激情网站在线观看| 丁香五月天婷婷| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 黄色大片免费看| 亚洲无码精品视频| 99视频精品视频| 韩国成人无码视频| 激情二区| 好男人一区二区三区在线观看| 波多野结衣国产区42部| 久久久成人免费视频| 国产精品成人无码专区| 免费操逼视频在线观看| 亚洲综合免费观看高清完整版| 都市激情亚洲| 人人看人人摸人人操| 一区二区免费视频| 国产精品色婷婷99久久精品| 老太色HD色老太HD.| 人人摸人人看人人| 狠狠干2025| 粗长哭叫打桩H体育生| 亚洲成人影片在线观看| 7777影视电视剧在线观看官网 | www.6969成人片亚洲| 欧美国产日韩在线| 欧美精品99| 大香蕉75| 麻豆videos| 午夜一本道| 蜜臀AV一区二区| 国产欧美黄片| 天天拍天天操| 日韩二区三区| 亚洲av在线观看| 搡BBBB搡BBB搡五十粉嫩 | 香蕉久久a毛片| 操逼欧美| AAA激情| 五月婷婷中文版| 欧美级黑寡妇毛片app| 成年视频网站| 日韩小视频在线| 午夜香蕉视频| 黄片av| 国产AV日韩| 国产精品2| 可以免费看的黄色视频| 91国产在线播放| 久久久久久久亚洲| 越南小嫩嫩BBWBBw| 伊人在线成人视频| 无码精品一区二区免费| 宅男噜噜噜66一区二区| 日韩欧美V| 国产成人精品一区二区三区| 国产一级免费视频| 国产玖玖爱| 91精品国自产在线观看| 8050午夜网| 成人片天天看片欧美一级| 黄色视频免费在线看| AV无码网| 国产精品乱子伦一区二区三区视频 | AV2014天堂网| 欧美AAA视频| 免费黄色在线| TokyoKot大交乱无码| 特级西西WWW无码| 无码无卡| 人人爽夜夜爽| 国产精品一二三| 中文无码熟妇一区二区| 成人综合娱乐网| 亚洲小视频在线播放| 极品AV| 97超碰碰| 国产黄色a片| 翔田千里中文字幕无码| 88AV在线播放| 中文无码熟妇人妻AV在线| 最新va在线观看| 特黄视频在线观看| 欧美婬乱片A片AAA毛片地址| 中文字幕在线观看高清| 久久久精品电影| 国产久久免费视频| 久久久国产精品在线| 高清无码网址| 在线免费观看黄| 精品乱子伦一区二区三区,亚洲国产成| 国产免费网址| 黄色视频毛片一一| 欧美一级婬片AAAA毛片| 国产成人精品AV在线观| 国产操P| 免费AV影片| 国产一级黄色录像| 91香蕉视频18| 国产欧美日韩综合精品| 日韩毛片在线看| 青娱乐国产在线视频| 中文字幕乱妇无码Av在线| 午夜视频99| 牛牛在线精品视频| 黄色a视频| 影音先锋成人在线| 青娱乐国产精品一区二区| 国产精品久久久久久精| 色五月婷婷五月| 中文字幕浅井香舞被黑人俘虏| 久久久久成人视频| 人人香蕉| www.婷婷五月天| 国产无遮挡又黄又爽在线观看| 色欲av网站| 伊人综合网站| 青青草原亚洲| 2024无码| 五月天一区二区| 人人澡人人澡| 欧美色图狠狠操| 国产又爽又黄免费网站在| 免费无码成人片在线播放| 亚洲天堂女| 男女91视频| 亚洲性爱影院| 国产熟妇码视频黑料| 免费看A片视频| 欧美成人高清视频| 免费无码婬片A片AAA毛片96| 人与鲁牲交| 超碰97av| 中文字幕日本| 男女AV在线免费观看| 亚洲无码在线播放视频| 精品国产无码怀孕| 国产无码乱伦内射| 草草视频在线观看| 欧美日韩精品在线观看| 日韩精品成人在线视频| 国内久久婷婷| 国产精品一区在线观看| 伊人大香蕉在线网| 亚洲午夜在线| 无码性爱视频| 躁BBB躁BBB躁BBBBBB日视频| 黄色特级毛片| 日本中文字幕在线观看| 亚洲在线观看免费| 日韩欧美视频一区| 国产清纯可爱美女自卫裸贷偷情 | 日本在线观看www| 欧美啪啪啪| 插进去综合图| 欧美在线视频一区二区| A级片在线观看| 黑人vs亚洲人在线播放| 婷婷综合一区| 国产精品福利视频| 97桃色| 伊人影院在线观看| 亚洲黄色电影在线观看| 欧美在线亚洲| 亚洲日韩av在线| 日P免费视频| 狠狠色五月亚洲91| 高清无码三级片| 国产无遮挡又黄又爽又色视频软件 | 成人视频18+在线观看| 成人日韩无码| 久久久视频6r| 亚洲综合在线网| 国产非洲欧美在线| 久久大陆| 97久久97欧美精品A片| 欧美一级特黄A片免费观看| 中文字幕乱码中文字幕电视剧| 无码免费观看| 日本国产视频| 婷婷色婷婷| 无码观看视频| 欧美群交在线观看| 吴梦梦一区二区三区| 欧美日韩性爱网站| 91成人视频在线观看| 操逼网址大全| 欧美日批| 91在线无码精品入口电车| 国产情侣在线视频| 翔田千里无码流出两部| 欧美色视频一区二区三区在线观看| 婷婷日韩| 国产午夜精品一区二区三区四区 | 福利一区二区视频网| 91人妻人人爽人人澡| 国产少妇| 国精品无码人妻一区二区三区| 91人妻论坛| 国产免看一级a一片成人aⅴ| 日韩黄片免费看| 日本色色网站免费| 国产高清久久| 亚洲成人影片| 黄色在线视频观看| 一夲道无码专区av无码A片| 九九久久精品视频| 国产A片视频| 欧美色图1| 国产一级a毛一级a做免费高清视频| 黄色的视频网站| 加勒比无码在线播放| 狼友视频第二页| 国产做受91电影| 久久久久久久| 日韩人妻精品中文字幕专区不卡 | 国产又黄又大又粗的视频| 麻豆性爱视频| 国产激情电影| 99热er| 精品国产乱子伦一区二区三区,小小扐| 波多野结衣亚洲视频| 91搞一搞| 91三级在线观看| 短发半推半就AV| 免费黄色一级电影| 亚洲图片激情乱伦小说| 国产探花| 精品中文在线视频| 四虎A片| 国产视频一区二区在线| 亚洲精品A| 91国产视频在线播放| 99视频精品全部免费看| 天天综合天天干| 99久久综合国产精品二区| 无码爱爱视频| 苍井空精毛片精品久久久| 亚洲免费视频播放| 中文字幕乱在线| 欧美群交在线| 免费在线观看内射| a视频在线免费观看| 婷婷五月天电影网| 久久久久久av| 色国产在线| 日本黄色电影网站| 国产精品久久久久久久久久久久久久久| 亚洲精品无码在线观看| 在线操B| 欧美AAAAAA视频| 日韩成人小说| 亚洲AV综合色区无码国产播放| 亚欧洲精品在线视频免费观看| 亚洲精品一区二区三区四区高清| 99无码国产成人精品| 久久久久久久久成人| 欧美久草| 亚洲精品白浆高清久久久久久| 大鸡巴在线观看| 欧美久久久久久久| 一区二区三区精品| 熟女少妇一区二区三区| 激情另类| 中文字幕国产av| 国产一区二区三区四区五区六区七区 | 亚洲视频无码| 色屁屁草草影院ccyycom| 在线观看毛片网站| JiZZjiZZ亚洲成熟熟妇| 中文字幕一区二区三区人妻电影| 高清无码视频在线播放| 欧美黄色免费在线观看| 99精品热| 久久免费在线视频| 婷婷激情中文字幕| 黄色视频网站在线观看免费| 天天看高清无码| 免费A片在线观看| 一本色道久久综合狠狠躁| 亚洲操逼逼| 91官网在线观看| 狠狠干狠狠草| 日本理论片一道本| 欧美特级毛片| 国产黄色小电影| 久艹在线视频| 白嫩在线| 久久露脸国语精品国产91| 亚洲的天堂的αⅴ| 国产美女在线播放| 午夜福利影院在线| 韩日一区二区| 国产精品S色| 黃色A片一級二級三級免費久久久| 五月丁香婷婷在线| 午夜福利在线播放| 操逼视频免费| 精品一区二区久久久久久久网站| 久久五月天综合| 中文字幕精品无码| 91成人无码看片在线观看网址| 日p视频在线观看| 欧美一区二区在线| 中文字幕福利视频| 69国产成人精品二区| 91视频在线观看免费| 成人精品三级麻豆| 影音先锋91| 亚洲三级在线| 欧美日韩视频在线播放| 草草影院第一页YYCCC| 懂色AV| 五月天伊人| 国产精品久久久久久久牛牛 | 在线欧美日| 成人黄色在线| 国产激情视频在线播放| 国产亲子乱婬一级A片借种| 黄色片大香蕉| H无码| 大香蕉AV在线观看| 无码人妻精品一区二区三区温州 | 成年人黄色电影| 亚洲无码少妇| 日本东京热视频| 伊人88| 大鸡巴久久久久久久| www超碰在线| 五十路在线视频| 日韩在线视频一区二区三区| 久久依人大香蕉| 黄色视频在线观看18| 日本在线精品视频| 四房五月婷婷| 婷婷视频网站| 泄火熟妇2-ThePorn| 91热热| 18禁网站免费观看| 中文字幕一区二区蜜桃| 专区无日本视频高清8| WWW色色| 亚洲黄色视频在线免费观看| 逼特逼视频| 欧美日韩中文字幕| 色婷婷六月| 国产精品黑人ThePorn| 水蜜桃一区二区| 国产91精品探花一区二区| 看一级黄色视频| 久久无码影院| 中文字幕日韩欧美| 婷婷五月丁香激情| 男人操女人免费网站| 美日韩综合| 中文字幕h| 91丨PORNY丨丰满人妻网站 | 婷婷情色五月| 国产在线观看| 黄色电影一级片| 亚洲AV无码乱码国产| 親子亂子倫XXXX| 无码免费在线视频| 福利三区| 国产aaaaaa| 91在线无码视频| 日韩人妻丰满无码区A片| 午夜性爱剧场| 台湾精品无码| 国产永久在线| 日韩精品一区二区三区四在线播放| 日日干天天| 国产精品婷婷午夜在线观看| 丁香婷婷综合网| 欧美日韩中文在线视频| 精品无码一区二区三区四区| 亚洲精品第一页| 国产亚洲三级| 2016超碰| 在线成人视频网站大香蕉在线网站 | 肏逼网站| 亚洲中午字幕| 亚洲成人综合网站| 婷婷五月天色综合| 天天干网址| 日韩在线免费视频| 影音先锋亚洲资源| 91精品婷婷国产综合久久| 在线啊啊啊| 蜜臀久久99精品久久久久久宅男| 久久亚洲日韩天天做日日做综合亚洲| 成人日韩无码| www.6969成人片亚洲| 国产视频在线免费观看| 免费的黄色视频在线观看| 黄色电影毛片| sesese| 高清无码免费观看| 再深点灬好爽灬轻点久久国产| 成人网大香蕉| 成人18视频| 日韩无码不卡电影| 亚洲无码三级片| 口爆在线观看| 99热最新在线| 日韩黄色免费电影| 大地av| 中国老少配BBwBBwBBW| 亚洲日韩欧美性爱| 成人电影一区二区三区| 亚洲激情综合网| 欧美日韩大香蕉| 色综合大香蕉| 午夜传媒一区二区三区| av天天av无码av天天爽| 人妻少妇av中文字幕乱码牛牛 | 吴梦梦一区二区三区| 欧美视频一区二区三区| 特级西西444www高清| 亚洲精品无码中文字幕| 成人激情免费视频| 男人视频网站| 亚洲精品自拍视频| 亚洲v欧美v| 不雅一级| 高清无码在线看| 久热精品在线观看| 一区二区国产精品| 91亚洲精品在线观看| 大鸡巴久久久久久| www在线视频| 亚洲无码手机在线| 美日毛片| 91一区二区三区| 欧美性爱自拍| 一级黄色电影网| 三级无码在线| 天天爱天天爽| 影音先锋在线成人| 中文字幕无码影院| 91精品国产91久久久久久吃药| 天天干网址| XXXX操| 国产激情在线| 亚洲精品影院| 人妻熟女字幕一区二区| 免费毛片网| 四虎永久在线精品| 亚洲在线高清| 成人做爰黄A片免费视频网站野外| 俺去啦俺去啦| 操逼激情视频| 欧美老司机| 五月天无码av| 最新中文字幕观看| 成人性生活A级毛片网站| 天天拍天天干| 国产操片| 久草综合在线| 一级a一级a免费观看视频Al明星 | 大香蕉操逼网| 亚洲性爱影院| 欧美一区二区三区免费| 亚洲系列中文字幕| 久久综合操| 国产视频高清无码| 成人自拍视频在线| 欧亚一区二区| 大香蕉一本| 久久精品国产AV一区二区三区| 91牛视频| 男人AV网| 亚洲AV无码成人精品区天堂小说 | 国产特黄视频| 日韩毛片在线视频x| 午夜午夜福利理论片在线播放| 久久久久久久久久久久久自慰小片| 波多野结衣黄色| 天天爽日日澡AAAA片| 日韩在线视频一区| 国产无码片| 在线视频一区二区三区| 无码福利电影| 日韩成人小电影| 日韩1页| 中文在线a√在线8| 97人妻在线视频| 2025天天操| 俄罗斯老熟妇与子伦| 亚洲AV无码成人精品久久久| 啪啪人妻| 4080yy午夜理论片成人| AAA激情| 日韩天堂av| www一个人免费观看视频www| 女侠吕四娘第二部| 无码a区天堂| 亚洲国产成人精品女人久久久| 黄片www| 人人爽人人爽| 影音先锋成人在线| 波多野结衣高清无码| 亚洲三级无码| 日逼视频网站| 好吊视频一区二区三区| 日韩城人网站| 日韩成人无码一区二区视频| 高清无码在线视频| 日韩性爱视频| 中文字幕片av| 亚洲成人少妇老妇a视频在线| 麻豆传媒一区| 亚洲欧美日韩黑料吃瓜在线观看 | 欧美精品久久久久久| 久久久三级| 亚洲A√| 日韩爱爱| 99视频在线免费观看| 日本黄色片| 天天射天天干| 秋霞一区二区三区无码| 白白操白白干| 韩国中文字幕HD久久精品| www.爆操| 永久免费不卡在线观看黄网站| 一级做a视频| 婷婷五月激情中文字幕| 十八禁网站在线观看| 日韩AV成人无码久久电影| 午夜无码福利视频| 无码在线看| 狠狠狠狠狠狠狠狠狠狠| 亚洲精品麻豆| 黄色视频日本免费| 人人爽人人做| 自拍偷拍网址| 干老女人视频| 亚洲涩情91日韩一区二区| 无码人妻精品一区二区蜜桃91| 九九福利视频| 日韩黄视频| 狠狠干免费视频| 插吧插吧网| 中文字幕一区二区三区四区| 精品福利导航| 男人AV网| 久久久国产一区二区三区| 天天综合网久久| aV无码av天天aV天天爽第一| 中国AV网| 2025无码视频| 国产欧美黄片| 一级黄色电影免费观看| 亚洲乱| 欧美日韩性爱| 国产91无码精品秘入口新欢| 国产无码电影| 日韩操B| 日本久久高清| 中文字幕日韩欧美在线| 国产一级A片免费播放| 琪琪久久| 国产免费福利| 中文无码熟妇人妻| 亚洲日韩成人电影| 九色PORNY国产成人| 免费一级无码婬片A片APP直播| 婷婷久久久| 国产系列每日更新| 污污污污污www网站免费民国| 亚洲a在线视频| 97人妻精品一区二区三区软件| 一级黄色视频片| 日本成人高清视频| 亚洲福利在线观看视频| 国产一级片免费观看| 天天日天天操天天射| 一级片免费在线观看| 日本成片网| 在线中出| 免费看黄色片视频| 麻豆自拍偷拍视频| 国产在线观看免费| 欧美一级aa| 国产成人一区二区三区| 天堂一区| 伊人色色综合| 成人综合大香蕉| 无码视频中文字幕| 精品一区二区三区免费| 欧美久久精品| 黄色小视频在线观看| 大香蕉国产在线| 久久无码黄片| 免费看片av| 超碰在线人妻| 九九精品99| 福利在线播放| 亚洲天堂网在线观看| 在线观看欧美日韩视频| 无码人妻精品一区二区50| 二级黄色视频| 久热免费视频在线观看| 一级片成人| 国产福利在线观看| 99热8| 日韩中文字幕一区二区三区| 无码一区二区三区免费看| 日韩高清欧美| www.日本色| a网站在线观看| 少妇一级片| 成人做爰100部片视频| 三级日韩视频| 国产精品永久久久久久久久久| 亚洲调教| 青青青视频在线| 国产小视频在线观看| 久草资源视频| 色资源在线观看| 91麻豆免费视频| 免费看的黄色视频| 伊人99| 草逼美女| 欧美精品一级| 久久中文字幕视频| 欧美在线视频免费观看| 69AV在线观看| 51XX嘿嘿午夜| 日本一区中文字幕| 上海熟妇搡BBBB搡BBBB| 欧美特黄AAAAAAAAA片| 婷婷久久五月| 欧美在线国产| 久久久久久久久黄色| 日本乱伦网| 激情五月天影院| www.久草| 亚洲精品一区二区三区四区高清| 无码一区二区黑人猛烈视频网站| 无码专区在线观看| 日韩av免费在线观看| sesese| 五香丁香天堂网| 精品久久免费视频| 国产精品久久久久久久久夜色| 国产精品成人AV在线| 翔田千里无码在线观看| 免费国产精品视频| 免费日韩毛片| 宅男视频| 操逼视频免费| 99都是精品| 丁香激情五月少妇| 美女网站在线观看| 操逼黄色视频| 国精产品一区二区三区在线观看 | 日本成人一区二区| 国产第一页在线播放| 99er热精品视频| 国产精品欧美综合在线| 人人操人人上| 亚州天堂网| 亚洲小视频在线观看| 秋霞91| 天天撸天天日| 国产精品免费人成人网站酒店| 成人无码毛片| AA黄色电影| 五月天婷婷无码| 尤物com| 婷婷五月亚洲| 欧美日韩一级在线观看| 国产最新av| 亚洲精品国产成人综合久久久久久久久| 最新一区二区| 人人妻人人玩澡人人爽| 精品国产A片| 国产黄色在线免费观看| 无码视频在线观看| 一卡二卡在线视频| 激情视频免费在线观看| 中国熟妇XXXX18| www、久久| 久久视频免费在线观看| 视频二区中文字幕| 丁香婷婷色五月| 蜜臀久久99精品久久久久久宅男| 水蜜桃网站在线观看| 黄片aaa| 国产精品成人国产乱| 免费视频99| 超碰在线国产| 成人在线乱码视频| 福利视频在线| 午夜蜜桃人妻一区二区| 欧美精品久久久| 3D精品啪啪一区二区三区| 日本成人黄色电影| 黄色小视频在线观看| 精品久久91| 日本AⅤ电影| 国产一级片在线播放| 中文字幕免费在线看一区七区| 日韩成人免费在线| 成人免费视频国产免费麻豆,| 欧美综合网| 三须三级久久三级久久18| 99re伊人| 免费看操逼视频| 网站av| 三级片高清无码| 久久国产AV| 男女视频网站在线观看| yw在线播放| 91久久久无码国产一区二区三区| 西西www444无码大胆| 黃色一級片黃色一級片尖叫声-百度-百 | 五月天成人小说| 欧美性爱自拍| 大鸡巴操小逼视频| 初尝人妻滑进去了莹莹视频| 大香蕉伊在线观看| 台湾成人在线视频| 中文在线字幕免费观| 日韩欧美网站| 亚洲无码一区二区三区妃光| 日韩美女在线| 日韩视频在线免费观看| 欧美一区二区三区四| 丁香色五月婷婷| 91在线观看视频| 超碰在线图片| 欧美第一区| 日逼一级| 成年视频网站| 日日操视频| 性欧美丰满熟妇XXXX性久久久| 天天摸天天看| 亚洲成人一区二区| 男人天堂资源网| 九九操逼| 国产精品HongKong麻豆 | 亚洲无码999| 中文字幕系列| 亚洲三级毛片| 91综合视频| 有免费的欧美操逼视频吗| 91热热| 成人国产精品秘在线看| 影音先锋中文字幕av| 久久久福利视频| www黄片视频| 四虎成人免费视频| 国产一级在线观看| 九七在线视频| www.俺来也| 操逼基地| 久久婷婷色| 999精品视频| 亚洲黄色在线观看视频| 日韩无码首页| 蜜桃av久久久亚洲精品|