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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android影院选座

發布時間:2023/12/31 Android 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android影院选座 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先先看一下效果圖

這里只是簡單的實現了這個效果,具體的思路以及知識點我個人還是不怎么理解下面的倆個連接多看一下

https://www.cnblogs.com/itgungnir/p/6217447.html?tdsourcetag=s_pcqq_aiomsg

https://blog.csdn.net/lmj623565791/article/details/45022631/

第一步:

寫自定義view的類

public class SeatTable extends View {private final boolean DBG = false;Paint paint = new Paint();Paint overviewPaint=new Paint();Paint lineNumberPaint;float lineNumberTxtHeight;/*** 設置行號 默認顯示 1,2,3....數字* @param lineNumbers*/public void setLineNumbers(ArrayList<String> lineNumbers) {this.lineNumbers = lineNumbers;invalidate();}/*** 用來保存所有行號*/ArrayList<String> lineNumbers = new ArrayList<>();Paint.FontMetrics lineNumberPaintFontMetrics;Matrix matrix = new Matrix();/*** 座位水平間距*/int spacing;/*** 座位垂直間距*/int verSpacing;/*** 行號寬度*/int numberWidth;/*** 行數*/int row;/*** 列數*/int column;/*** 可選時座位的圖片*/Bitmap seatBitmap;/*** 選中時座位的圖片*/Bitmap checkedSeatBitmap;/*** 座位已經售出時的圖片*/Bitmap seatSoldBitmap;Bitmap overviewBitmap;int lastX;int lastY;/*** 整個座位圖的寬度*/int seatBitmapWidth;/*** 整個座位圖的高度*/int seatBitmapHeight;/*** 標識是否需要繪制座位圖*/boolean isNeedDrawSeatBitmap = true;/*** 概覽圖白色方塊高度*/float rectHeight;/*** 概覽圖白色方塊的寬度*/float rectWidth;/*** 概覽圖上方塊的水平間距*/float overviewSpacing;/*** 概覽圖上方塊的垂直間距*/float overviewVerSpacing;/*** 概覽圖的比例*/float overviewScale = 4.8f;/*** 熒幕高度*/float screenHeight;/*** 熒幕默認寬度與座位圖的比例*/float screenWidthScale = 0.5f;/*** 熒幕最小寬度*/int defaultScreenWidth;/*** 標識是否正在縮放*/boolean isScaling;float scaleX, scaleY;/*** 是否是第一次縮放*/boolean firstScale = true;/*** 最多可以選擇的座位數量*/int maxSelected = Integer.MAX_VALUE;private SeatChecker seatChecker;/*** 熒幕名稱*/private String screenName = "";/*** 整個概覽圖的寬度*/float rectW;/*** 整個概覽圖的高度*/float rectH;Paint headPaint;Bitmap headBitmap;/*** 是否第一次執行onDraw*/boolean isFirstDraw = true;/*** 標識是否需要繪制概覽圖*/boolean isDrawOverview = false;/*** 標識是否需要更新概覽圖*/boolean isDrawOverviewBitmap = true;int overview_checked;int overview_sold;int txt_color;int seatCheckedResID;int seatSoldResID;int seatAvailableResID;boolean isOnClick;/*** 座位已售*/private static final int SEAT_TYPE_SOLD = 1;/*** 座位已經選中*/private static final int SEAT_TYPE_SELECTED = 2;/*** 座位可選*/private static final int SEAT_TYPE_AVAILABLE = 3;/*** 座位不可用*/private static final int SEAT_TYPE_NOT_AVAILABLE = 4;private int downX, downY;private boolean pointer;/*** 頂部高度,可選,已選,已售區域的高度*/float headHeight;Paint pathPaint;RectF rectF;/*** 頭部下面橫線的高度*/int borderHeight = 1;Paint redBorderPaint;/*** 默認的座位圖寬度,如果使用的自己的座位圖片比這個尺寸大或者小,會縮放到這個大小*/private float defaultImgW = 40;/*** 默認的座位圖高度*/private float defaultImgH = 34;/*** 座位圖片的寬度*/private int seatWidth;/*** 座位圖片的高度*/private int seatHeight;public SeatTable(Context context) {super(context);}public SeatTable(Context context, AttributeSet attrs) {super(context, attrs);init(context,attrs);}private void init(Context context,AttributeSet attrs){TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.styleable);overview_checked = typedArray.getColor(R.styleable.styleable_overview_checked, Color.parseColor("#5A9E64"));overview_sold = typedArray.getColor(R.styleable.styleable_overview_sold, Color.RED);txt_color=typedArray.getColor(R.styleable.styleable_txt_color,Color.WHITE);seatCheckedResID = typedArray.getResourceId(R.styleable.styleable_seat_checked, R.drawable.seat_gray);seatSoldResID = typedArray.getResourceId(R.styleable.styleable_overview_sold, R.drawable.sold);seatAvailableResID = typedArray.getResourceId(R.styleable.styleable_seat_available, R.drawable.seat_green);typedArray.recycle();}public SeatTable(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context,attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}float xScale1 = 1;float yScale1 = 1;private void init() {spacing = (int) dip2Px(5);verSpacing = (int) dip2Px(10);defaultScreenWidth = (int) dip2Px(80);seatBitmap = BitmapFactory.decodeResource(getResources(), seatAvailableResID);float scaleX = defaultImgW / seatBitmap.getWidth();float scaleY = defaultImgH / seatBitmap.getHeight();xScale1 = scaleX;yScale1 = scaleY;seatHeight= (int) (seatBitmap.getHeight()*yScale1);seatWidth= (int) (seatBitmap.getWidth()*xScale1);checkedSeatBitmap = BitmapFactory.decodeResource(getResources(), seatCheckedResID);seatSoldBitmap = BitmapFactory.decodeResource(getResources(), seatSoldResID);seatBitmapWidth = (int) (column * seatBitmap.getWidth()*xScale1 + (column - 1) * spacing);seatBitmapHeight = (int) (row * seatBitmap.getHeight()*yScale1 + (row - 1) * verSpacing);paint.setColor(Color.RED);numberWidth = (int) dip2Px(20);screenHeight = dip2Px(20);headHeight = dip2Px(30);headPaint = new Paint();headPaint.setStyle(Paint.Style.FILL);headPaint.setTextSize(24);headPaint.setColor(Color.WHITE);headPaint.setAntiAlias(true);pathPaint = new Paint(Paint.ANTI_ALIAS_FLAG);pathPaint.setStyle(Paint.Style.FILL);pathPaint.setColor(Color.parseColor("#e2e2e2"));redBorderPaint = new Paint();redBorderPaint.setAntiAlias(true);redBorderPaint.setColor(Color.RED);redBorderPaint.setStyle(Paint.Style.STROKE);redBorderPaint.setStrokeWidth(getResources().getDisplayMetrics().density * 1);rectF = new RectF();rectHeight = seatHeight / overviewScale;rectWidth = seatWidth / overviewScale;overviewSpacing = spacing / overviewScale;overviewVerSpacing = verSpacing / overviewScale;rectW = column * rectWidth + (column - 1) * overviewSpacing + overviewSpacing * 2;rectH = row * rectHeight + (row - 1) * overviewVerSpacing + overviewVerSpacing * 2;overviewBitmap = Bitmap.createBitmap((int) rectW, (int) rectH, Bitmap.Config.ARGB_4444);lineNumberPaint = new Paint(Paint.ANTI_ALIAS_FLAG);lineNumberPaint.setColor(bacColor);lineNumberPaint.setTextSize(getResources().getDisplayMetrics().density * 16);lineNumberTxtHeight = lineNumberPaint.measureText("4");lineNumberPaintFontMetrics = lineNumberPaint.getFontMetrics();lineNumberPaint.setTextAlign(Paint.Align.CENTER);if(lineNumbers==null){lineNumbers=new ArrayList<>();}else if(lineNumbers.size()<=0) {for (int i = 0; i < row; i++) {lineNumbers.add((i + 1) + "");}}matrix.postTranslate(numberWidth + spacing, headHeight + screenHeight + borderHeight + verSpacing);}@Overrideprotected void onDraw(Canvas canvas) {long startTime = System.currentTimeMillis();if (row <= 0 || column == 0) {return;}drawSeat(canvas);drawNumber(canvas);if (headBitmap == null) {headBitmap = drawHeadInfo();}canvas.drawBitmap(headBitmap, 0, 0, null);drawScreen(canvas);if (isDrawOverview) {long s = System.currentTimeMillis();if (isDrawOverviewBitmap) {drawOverview();}canvas.drawBitmap(overviewBitmap, 0, 0, null);drawOverview(canvas);Log.d("drawTime", "OverviewDrawTime:" + (System.currentTimeMillis() - s));}if (DBG) {long drawTime = System.currentTimeMillis() - startTime;Log.d("drawTime", "totalDrawTime:" + drawTime);}}@Overridepublic boolean onTouchEvent(MotionEvent event) {int y = (int) event.getY();int x = (int) event.getX();super.onTouchEvent(event);scaleGestureDetector.onTouchEvent(event);gestureDetector.onTouchEvent(event);int pointerCount = event.getPointerCount();if (pointerCount > 1) {pointer = true;}switch (event.getAction()) {case MotionEvent.ACTION_DOWN:pointer = false;downX = x;downY = y;isDrawOverview = true;handler.removeCallbacks(hideOverviewRunnable);invalidate();break;case MotionEvent.ACTION_MOVE:if (!isScaling && !isOnClick) {int downDX = Math.abs(x - downX);int downDY = Math.abs(y - downY);if ((downDX > 10 || downDY > 10) && !pointer) {int dx = x - lastX;int dy = y - lastY;matrix.postTranslate(dx, dy);invalidate();}}break;case MotionEvent.ACTION_UP:handler.postDelayed(hideOverviewRunnable, 1500);autoScale();int downDX = Math.abs(x - downX);int downDY = Math.abs(y - downY);if ((downDX > 10 || downDY > 10) && !pointer) {autoScroll();}break;}isOnClick = false;lastY = y;lastX = x;return true;}private Runnable hideOverviewRunnable = new Runnable() {@Overridepublic void run() {isDrawOverview = false;invalidate();}};Bitmap drawHeadInfo() {String txt = "已售";float txtY = getBaseLine(headPaint, 0, headHeight);int txtWidth = (int) headPaint.measureText(txt);float spacing = dip2Px(10);float spacing1 = dip2Px(5);float y = (headHeight - seatBitmap.getHeight()) / 2;float width = seatBitmap.getWidth() + spacing1 + txtWidth + spacing + seatSoldBitmap.getWidth() + txtWidth + spacing1 + spacing + checkedSeatBitmap.getHeight() + spacing1 + txtWidth;Bitmap bitmap = Bitmap.createBitmap(getWidth(), (int) headHeight, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);//繪制背景canvas.drawRect(0, 0, getWidth(), headHeight, headPaint);headPaint.setColor(Color.BLACK);float startX = (getWidth() - width) / 2;tempMatrix.setScale(xScale1,yScale1);tempMatrix.postTranslate(startX,(headHeight - seatHeight) / 2);canvas.drawBitmap(seatBitmap, tempMatrix, headPaint);canvas.drawText("可選", startX + seatWidth + spacing1, txtY, headPaint);float soldSeatBitmapY = startX + seatBitmap.getWidth() + spacing1 + txtWidth + spacing;tempMatrix.setScale(xScale1,yScale1);tempMatrix.postTranslate(soldSeatBitmapY,(headHeight - seatHeight) / 2);canvas.drawBitmap(seatSoldBitmap, tempMatrix, headPaint);canvas.drawText("已售", soldSeatBitmapY + seatWidth + spacing1, txtY, headPaint);float checkedSeatBitmapX = soldSeatBitmapY + seatSoldBitmap.getWidth() + spacing1 + txtWidth + spacing;tempMatrix.setScale(xScale1,yScale1);tempMatrix.postTranslate(checkedSeatBitmapX,y);canvas.drawBitmap(checkedSeatBitmap, tempMatrix, headPaint);canvas.drawText("已選", checkedSeatBitmapX + spacing1 + seatWidth, txtY, headPaint);//繪制分割線headPaint.setStrokeWidth(1);headPaint.setColor(Color.GRAY);canvas.drawLine(0, headHeight, getWidth(), headHeight, headPaint);return bitmap;}/*** 繪制中間屏幕*/void drawScreen(Canvas canvas) {pathPaint.setStyle(Paint.Style.FILL);pathPaint.setColor(Color.parseColor("#e2e2e2"));float startY = headHeight + borderHeight;float centerX = seatBitmapWidth * getMatrixScaleX() / 2 + getTranslateX();float screenWidth = seatBitmapWidth * screenWidthScale * getMatrixScaleX();if (screenWidth < defaultScreenWidth) {screenWidth = defaultScreenWidth;}Path path = new Path();path.moveTo(centerX, startY);path.lineTo(centerX - screenWidth / 2, startY);path.lineTo(centerX - screenWidth / 2 + 20, screenHeight * getMatrixScaleY() + startY);path.lineTo(centerX + screenWidth / 2 - 20, screenHeight * getMatrixScaleY() + startY);path.lineTo(centerX + screenWidth / 2, startY);canvas.drawPath(path, pathPaint);pathPaint.setColor(Color.BLACK);pathPaint.setTextSize(20 * getMatrixScaleX());canvas.drawText(screenName, centerX - pathPaint.measureText(screenName) / 2, getBaseLine(pathPaint, startY, startY + screenHeight * getMatrixScaleY()), pathPaint);}Matrix tempMatrix = new Matrix();void drawSeat(Canvas canvas) {zoom = getMatrixScaleX();long startTime = System.currentTimeMillis();float translateX = getTranslateX();float translateY = getTranslateY();float scaleX = zoom;float scaleY = zoom;for (int i = 0; i < row; i++) {float top = i * seatBitmap.getHeight() * yScale1 * scaleY + i * verSpacing * scaleY + translateY;float bottom = top + seatBitmap.getHeight() * yScale1 * scaleY;if (bottom < 0 || top > getHeight()) {continue;}for (int j = 0; j < column; j++) {float left = j * seatBitmap.getWidth() * xScale1 * scaleX + j * spacing * scaleX + translateX;float right = (left + seatBitmap.getWidth() * xScale1 * scaleY);if (right < 0 || left > getWidth()) {continue;}int seatType = getSeatType(i, j);tempMatrix.setTranslate(left, top);tempMatrix.postScale(xScale1, yScale1, left, top);tempMatrix.postScale(scaleX, scaleY, left, top);switch (seatType) {case SEAT_TYPE_AVAILABLE:canvas.drawBitmap(seatBitmap, tempMatrix, paint);break;case SEAT_TYPE_NOT_AVAILABLE:break;case SEAT_TYPE_SELECTED:canvas.drawBitmap(checkedSeatBitmap, tempMatrix, paint);drawText(canvas, i, j, top, left);break;case SEAT_TYPE_SOLD:canvas.drawBitmap(seatSoldBitmap, tempMatrix, paint);break;}}}if (DBG) {long drawTime = System.currentTimeMillis() - startTime;Log.d("drawTime", "seatDrawTime:" + drawTime);}}private int getSeatType(int row, int column) {if (isHave(getID(row, column)) >= 0) {return SEAT_TYPE_SELECTED;}if (seatChecker != null) {if (!seatChecker.isValidSeat(row, column)) {return SEAT_TYPE_NOT_AVAILABLE;} else if (seatChecker.isSold(row, column)) {return SEAT_TYPE_SOLD;}}return SEAT_TYPE_AVAILABLE;}private int getID(int row, int column) {return row * this.column + (column + 1);}/*** 繪制選中座位的行號列號** @param row* @param column*/private void drawText(Canvas canvas, int row, int column, float top, float left) {String txt = (row + 1) + "排";String txt1 = (column + 1) + "座";if(seatChecker!=null){String[] strings = seatChecker.checkedSeatTxt(row, column);if(strings!=null&&strings.length>0){if(strings.length>=2){txt=strings[0];txt1=strings[1];}else {txt=strings[0];txt1=null;}}}TextPaint txtPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);txtPaint.setColor(txt_color);txtPaint.setTypeface(Typeface.DEFAULT_BOLD);float seatHeight = this.seatHeight * getMatrixScaleX();float seatWidth = this.seatWidth * getMatrixScaleX();txtPaint.setTextSize(seatHeight / 3);//獲取中間線float center = seatHeight / 2;float txtWidth = txtPaint.measureText(txt);float startX = left + seatWidth / 2 - txtWidth / 2;//只繪制一行文字if(txt1==null){canvas.drawText(txt, startX, getBaseLine(txtPaint, top, top + seatHeight), txtPaint);}else {canvas.drawText(txt, startX, getBaseLine(txtPaint, top, top + center), txtPaint);canvas.drawText(txt1, startX, getBaseLine(txtPaint, top + center, top + center + seatHeight / 2), txtPaint);}if (DBG) {Log.d("drawTest:", "top:" + top);}}int bacColor = Color.parseColor("#7e000000");/*** 繪制行號*/void drawNumber(Canvas canvas) {long startTime = System.currentTimeMillis();lineNumberPaint.setColor(bacColor);int translateY = (int) getTranslateY();float scaleY = getMatrixScaleY();rectF.top = translateY - lineNumberTxtHeight / 2;rectF.bottom = translateY + (seatBitmapHeight * scaleY) + lineNumberTxtHeight / 2;rectF.left = 0;rectF.right = numberWidth;canvas.drawRoundRect(rectF, numberWidth / 2, numberWidth / 2, lineNumberPaint);lineNumberPaint.setColor(Color.WHITE);for (int i = 0; i < row; i++) {float top = (i *seatHeight + i * verSpacing) * scaleY + translateY;float bottom = (i * seatHeight + i * verSpacing + seatHeight) * scaleY + translateY;float baseline = (bottom + top - lineNumberPaintFontMetrics.bottom - lineNumberPaintFontMetrics.top) / 2;canvas.drawText(lineNumbers.get(i), numberWidth / 2, baseline, lineNumberPaint);}if (DBG) {long drawTime = System.currentTimeMillis() - startTime;Log.d("drawTime", "drawNumberTime:" + drawTime);}}/*** 繪制概覽圖*/void drawOverview(Canvas canvas) {//繪制紅色框int left = (int) -getTranslateX();if (left < 0) {left = 0;}left /= overviewScale;left /= getMatrixScaleX();int currentWidth = (int) (getTranslateX() + (column * seatWidth + spacing * (column - 1)) * getMatrixScaleX());if (currentWidth > getWidth()) {currentWidth = currentWidth - getWidth();} else {currentWidth = 0;}int right = (int) (rectW - currentWidth / overviewScale / getMatrixScaleX());float top = -getTranslateY() + headHeight;if (top < 0) {top = 0;}top /= overviewScale;top /= getMatrixScaleY();if (top > 0) {top += overviewVerSpacing;}int currentHeight = (int) (getTranslateY() + (row * seatHeight + verSpacing * (row - 1)) * getMatrixScaleY());if (currentHeight > getHeight()) {currentHeight = currentHeight - getHeight();} else {currentHeight = 0;}int bottom = (int) (rectH - currentHeight / overviewScale / getMatrixScaleY());canvas.drawRect(left, top, right, bottom, redBorderPaint);}Bitmap drawOverview() {isDrawOverviewBitmap = false;int bac = Color.parseColor("#7e000000");overviewPaint.setColor(bac);overviewPaint.setAntiAlias(true);overviewPaint.setStyle(Paint.Style.FILL);overviewBitmap.eraseColor(Color.TRANSPARENT);Canvas canvas = new Canvas(overviewBitmap);//繪制透明灰色背景canvas.drawRect(0, 0, rectW, rectH, overviewPaint);overviewPaint.setColor(Color.WHITE);for (int i = 0; i < row; i++) {float top = i * rectHeight + i * overviewVerSpacing + overviewVerSpacing;for (int j = 0; j < column; j++) {int seatType = getSeatType(i, j);switch (seatType) {case SEAT_TYPE_AVAILABLE:overviewPaint.setColor(Color.WHITE);break;case SEAT_TYPE_NOT_AVAILABLE:continue;case SEAT_TYPE_SELECTED:overviewPaint.setColor(overview_checked);break;case SEAT_TYPE_SOLD:overviewPaint.setColor(overview_sold);break;}float left;left = j * rectWidth + j * overviewSpacing + overviewSpacing;canvas.drawRect(left, top, left + rectWidth, top + rectHeight, overviewPaint);}}return overviewBitmap;}/*** 自動回彈* 整個大小不超過控件大小的時候:* 往左邊滑動,自動回彈到行號右邊* 往右邊滑動,自動回彈到右邊* 往上,下滑動,自動回彈到頂部* <p>* 整個大小超過控件大小的時候:* 往左側滑動,回彈到最右邊,往右側滑回彈到最左邊* 往上滑動,回彈到底部,往下滑動回彈到頂部*/private void autoScroll() {float currentSeatBitmapWidth = seatBitmapWidth * getMatrixScaleX();float currentSeatBitmapHeight = seatBitmapHeight * getMatrixScaleY();float moveYLength = 0;float moveXLength = 0;//處理左右滑動的情況if (currentSeatBitmapWidth < getWidth()) {if (getTranslateX() < 0 || getMatrixScaleX() < numberWidth + spacing) {//計算要移動的距離if (getTranslateX() < 0) {moveXLength = (-getTranslateX()) + numberWidth + spacing;} else {moveXLength = numberWidth + spacing - getTranslateX();}}} else {if (getTranslateX() < 0 && getTranslateX() + currentSeatBitmapWidth > getWidth()) {} else {//往左側滑動if (getTranslateX() + currentSeatBitmapWidth < getWidth()) {moveXLength = getWidth() - (getTranslateX() + currentSeatBitmapWidth);} else {//右側滑動moveXLength = -getTranslateX() + numberWidth + spacing;}}}float startYPosition = screenHeight * getMatrixScaleY() + verSpacing * getMatrixScaleY() + headHeight + borderHeight;//處理上下滑動if (currentSeatBitmapHeight+headHeight < getHeight()) {if (getTranslateY() < startYPosition) {moveYLength = startYPosition - getTranslateY();} else {moveYLength = -(getTranslateY() - (startYPosition));}} else {if (getTranslateY() < 0 && getTranslateY() + currentSeatBitmapHeight > getHeight()) {} else {//往上滑動if (getTranslateY() + currentSeatBitmapHeight < getHeight()) {moveYLength = getHeight() - (getTranslateY() + currentSeatBitmapHeight);} else {moveYLength = -(getTranslateY() - (startYPosition));}}}Point start = new Point();start.x = (int) getTranslateX();start.y = (int) getTranslateY();Point end = new Point();end.x = (int) (start.x + moveXLength);end.y = (int) (start.y + moveYLength);moveAnimate(start, end);}private void autoScale() {if (getMatrixScaleX() > 2.2) {zoomAnimate(getMatrixScaleX(), 2.0f);} else if (getMatrixScaleX() < 0.98) {zoomAnimate(getMatrixScaleX(), 1.0f);}}Handler handler = new Handler();ArrayList<Integer> selects = new ArrayList<>();public ArrayList<String> getSelectedSeat(){ArrayList<String> results=new ArrayList<>();for(int i=0;i<this.row;i++){for(int j=0;j<this.column;j++){if(isHave(getID(i,j))>=0){results.add(i+","+j);}}}return results;}private int isHave(Integer seat) {return Collections.binarySearch(selects, seat);}private void remove(int index) {selects.remove(index);}float[] m = new float[9];private float getTranslateX() {matrix.getValues(m);return m[2];}private float getTranslateY() {matrix.getValues(m);return m[5];}private float getMatrixScaleY() {matrix.getValues(m);return m[4];}private float getMatrixScaleX() {matrix.getValues(m);return m[Matrix.MSCALE_X];}private float dip2Px(float value) {return getResources().getDisplayMetrics().density * value;}private float getBaseLine(Paint p, float top, float bottom) {Paint.FontMetrics fontMetrics = p.getFontMetrics();int baseline = (int) ((bottom + top - fontMetrics.bottom - fontMetrics.top) / 2);return baseline;}private void moveAnimate(Point start, Point end) {ValueAnimator valueAnimator = ValueAnimator.ofObject(new MoveEvaluator(), start, end);valueAnimator.setInterpolator(new DecelerateInterpolator());MoveAnimation moveAnimation = new MoveAnimation();valueAnimator.addUpdateListener(moveAnimation);valueAnimator.setDuration(400);valueAnimator.start();}private void zoomAnimate(float cur, float tar) {ValueAnimator valueAnimator = ValueAnimator.ofFloat(cur, tar);valueAnimator.setInterpolator(new DecelerateInterpolator());ZoomAnimation zoomAnim = new ZoomAnimation();valueAnimator.addUpdateListener(zoomAnim);valueAnimator.addListener(zoomAnim);valueAnimator.setDuration(400);valueAnimator.start();}private float zoom;private void zoom(float zoom) {float z = zoom / getMatrixScaleX();matrix.postScale(z, z, scaleX, scaleY);invalidate();}private void move(Point p) {float x = p.x - getTranslateX();float y = p.y - getTranslateY();matrix.postTranslate(x, y);invalidate();}class MoveAnimation implements ValueAnimator.AnimatorUpdateListener {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {Point p = (Point) animation.getAnimatedValue();move(p);}}class MoveEvaluator implements TypeEvaluator {@Overridepublic Object evaluate(float fraction, Object startValue, Object endValue) {Point startPoint = (Point) startValue;Point endPoint = (Point) endValue;int x = (int) (startPoint.x + fraction * (endPoint.x - startPoint.x));int y = (int) (startPoint.y + fraction * (endPoint.y - startPoint.y));return new Point(x, y);}}class ZoomAnimation implements ValueAnimator.AnimatorUpdateListener, Animator.AnimatorListener {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {zoom = (Float) animation.getAnimatedValue();zoom(zoom);if (DBG) {Log.d("zoomTest", "zoom:" + zoom);}}@Overridepublic void onAnimationCancel(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}@Overridepublic void onAnimationStart(Animator animation) {}}public void setData(int row, int column) {this.row = row;this.column = column;init();invalidate();}ScaleGestureDetector scaleGestureDetector = new ScaleGestureDetector(getContext(), new ScaleGestureDetector.OnScaleGestureListener() {@Overridepublic boolean onScale(ScaleGestureDetector detector) {isScaling = true;float scaleFactor = detector.getScaleFactor();if (getMatrixScaleY() * scaleFactor > 3) {scaleFactor = 3 / getMatrixScaleY();}if (firstScale) {scaleX = detector.getCurrentSpanX();scaleY = detector.getCurrentSpanY();firstScale = false;}if (getMatrixScaleY() * scaleFactor < 0.5) {scaleFactor = 0.5f / getMatrixScaleY();}matrix.postScale(scaleFactor, scaleFactor, scaleX, scaleY);invalidate();return true;}@Overridepublic boolean onScaleBegin(ScaleGestureDetector detector) {return true;}@Overridepublic void onScaleEnd(ScaleGestureDetector detector) {isScaling = false;firstScale = true;}});GestureDetector gestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {isOnClick = true;int x = (int) e.getX();int y = (int) e.getY();for (int i = 0; i < row; i++) {for (int j = 0; j < column; j++) {int tempX = (int) ((j * seatWidth + (j+1) * spacing) * getMatrixScaleX() + getTranslateX());int maxTemX = (int) (tempX + seatWidth * getMatrixScaleX());int tempY = (int) ((i * seatHeight + i * verSpacing) * getMatrixScaleY() + getTranslateY());int maxTempY = (int) (tempY + seatHeight * getMatrixScaleY());if (seatChecker != null && seatChecker.isValidSeat(i, j) && !seatChecker.isSold(i, j)) {if (x >= tempX && x <= maxTemX && y >= tempY && y <= maxTempY) {int id = getID(i, j);int index = isHave(id);if (index >= 0) {remove(index);if (seatChecker != null) {seatChecker.unCheck(i, j);}} else {if (selects.size() >= maxSelected) {Toast.makeText(getContext(), "最多只能選擇" + maxSelected + "個", Toast.LENGTH_SHORT).show();return super.onSingleTapConfirmed(e);} else {addChooseSeat(i, j);if (seatChecker != null) {seatChecker.checked(i, j);}}}isNeedDrawSeatBitmap = true;isDrawOverviewBitmap = true;float currentScaleY = getMatrixScaleY();if (currentScaleY < 1.7) {scaleX = x;scaleY = y;zoomAnimate(currentScaleY, 1.9f);}invalidate();break;}}}}return super.onSingleTapConfirmed(e);}});private void addChooseSeat(int row, int column) {int id = getID(row, column);for (int i = 0; i < selects.size(); i++) {int item = selects.get(i);if (id < item) {selects.add(i, id);return;}}selects.add(id);}public interface SeatChecker {/*** 是否可用座位** @param row* @param column* @return*/boolean isValidSeat(int row, int column);/*** 是否已售** @param row* @param column* @return*/boolean isSold(int row, int column);void checked(int row, int column);void unCheck(int row, int column);/*** 獲取選中后座位上顯示的文字* @param row* @param column* @return 返回2個元素的數組,第一個元素是第一行的文字,第二個元素是第二行文字,如果只返回一個元素則會繪制到座位圖的中間位置*/String[] checkedSeatTxt(int row, int column);}public void setScreenName(String screenName) {this.screenName = screenName;}public void setMaxSelected(int maxSelected) {this.maxSelected = maxSelected;}public void setSeatChecker(SeatChecker seatChecker) {this.seatChecker = seatChecker;invalidate();}private int getRowNumber(int row){int result=row;if(seatChecker==null){return -1;}for(int i=0;i<row;i++){for (int j=0;j<column;j++){if(seatChecker.isValidSeat(i,j)){break;}if(j==column-1){if(i==row){return -1;}result--;}}}return result;}private int getColumnNumber(int row,int column){int result=column;if(seatChecker==null){return -1;}for(int i=row;i<=row;i++){for (int j=0;j<column;j++){if(!seatChecker.isValidSeat(i,j)){if(j==column){return -1;}result--;}}}return result;} }

第二步:

在values文件下寫

<?xml version="1.0" encoding="utf-8"?> <resources><declare-styleable name="styleable"><attr name="seat_checked" format="reference" /><attr name="seat_sold" format="reference" /><attr name="seat_available" format="reference" /><attr name="overview_checked" format="color" /><attr name="overview_sold" format="color" /><attr name="txt_color" format="color"/></declare-styleable><declare-styleable name="LinearGradientTextView4"><attr name="lineNumber" format="integer"></attr><attr name="showTime" format="integer"></attr><attr name="textColor" format="color"></attr><attr name="showStyle"><enum name="UNIDIRECTION" value="0"></enum><enum name="TWOWAY" value="1"></enum></attr></declare-styleable> </resources>

第三步:

布局頁面

<com.bw.movie.activity.cinema_activity.SeatTableandroid:id="@+id/mSearchView"android:layout_below="@+id/image"android:layout_width="match_parent"android:layout_height="match_parent"/>

第四步:

我這是在Activity中寫的

找控件

seatTableView = (SeatTable)findViewById(R.id.mSearchView); seatTableView.setScreenName("8號廳熒幕");//設置屏幕名稱 seatTableView.setMaxSelected(3);//設置最多選中seatTableView.setSeatChecker(new SeatTable.SeatChecker() {@Overridepublic boolean isValidSeat(int row, int column) {if(column==2) {return false;}return true;}@Overridepublic boolean isSold(int row, int column) {if(row==6&&column==6){return true;}return false;}@Overridepublic void checked(int row, int column) {}@Overridepublic void unCheck(int row, int column) {}@Overridepublic String[] checkedSeatTxt(int row, int column) {return null;}}); seatTableView.setData(10,15);

?

?

?

?

?

總結

以上是生活随笔為你收集整理的Android影院选座的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产精品99久久免费黑人 | 久久综合久久综合这里只有精品 | 色综合久久天天 | 欧美日韩69 | 特黄特黄的视频 | 日韩成人免费电影 | 午夜电影av | 免费在线激情电影 | 亚洲欧美一区二区三区孕妇写真 | 日韩精品中文字幕在线不卡尤物 | 久久久精品小视频 | 日韩毛片在线一区二区毛片 | 亚洲日本激情 | 亚洲精品1区2区3区 超碰成人网 | 成年人在线免费看 | 国产精品 亚洲精品 | 婷婷国产v亚洲v欧美久久 | 免费高清国产 | 特级西西444www高清大视频 | 久久久麻豆精品一区二区 | 91av在线电影 | 91亚洲精品在线观看 | 97人人添人澡人人爽超碰动图 | 成人一区二区三区中文字幕 | 日韩中文字幕国产精品 | 啪啪午夜免费 | 日韩高清在线观看 | 热99久久精品 | 人人射人人插 | 天天射夜夜爽 | 国产精品区二区三区日本 | 精品国产亚洲一区二区麻豆 | 在线观看亚洲国产精品 | 国产成人一区二区三区在线观看 | 国产精品色婷婷视频 | 99在线视频免费观看 | 天天干天天操天天做 | 国产黄a三级三级三级三级三级 | 欧美性超爽 | 亚洲高清在线 | 久久久久久久久久久免费av | 91久久久久久国产精品 | 韩国av一区二区 | 日本精品一区二区三区在线播放视频 | a天堂免费 | 91福利免费| 九九久久电影 | 蜜臀一区二区三区精品免费视频 | 免费看污在线观看 | 久久五月婷婷丁香社区 | 一级片黄色片网站 | 亚洲高清资源 | 99999精品视频 | 色偷偷中文字幕 | 欧美不卡在线 | 婷婷丁香狠狠爱 | 免费日p视频| 国产白浆在线观看 | 日韩av电影免费观看 | 国产高清在线免费 | 久久久久久久久久久影视 | 免费观看www7722午夜电影 | 日韩欧美一区二区三区在线 | 国产成人精品亚洲 | 日韩在线高清视频 | 五月天国产精品 | 日日夜夜国产 | 91大片网站 | 久久久久久久久网站 | 成人一级片视频 | 亚洲国产丝袜在线观看 | 在线黄色观看 | 精品视频一区在线观看 | 最近中文字幕在线 | 欧美 日韩 性 | 一区二区三区动漫 | 日韩精品免费在线 | 国产精品久久在线 | 中文字幕色在线视频 | 在线观看免费视频 | 国产精品免费看久久久8精臀av | 99久久免费看 | 国产福利在线免费观看 | 欧美日韩精品影院 | 国产自产高清不卡 | 国产一区二区精 | 91综合久久一区二区 | 欧美成人h版在线观看 | 久久久一本精品99久久精品66 | 欧美激情片在线观看 | 亚洲免费av在线播放 | 91精品一区国产高清在线gif | 99国内精品久久久久久久 | 亚洲精品字幕在线 | 欧美精品一区二区性色 | 九九av| 国产精品日韩久久久久 | 久久精品网站视频 | 久久精品中文 | 国产h在线播放 | 国产精品毛片久久久久久 | 成人午夜精品福利免费 | 亚洲国产成人在线观看 | 精品福利av | 射射射av| 麻豆免费在线播放 | 97爱 | 伊人六月 | 国产xxxx做受性欧美88 | 亚洲最大激情中文字幕 | 99久高清在线观看视频99精品热在线观看视频 | 国产三级在线播放 | 久久久久久久久久久久国产精品 | 黄色的网站在线 | 成人黄色免费在线观看 | 亚洲精品777 | 日本中文一级片 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产精品va最新国产精品视频 | 波多野结衣综合网 | 亚洲欧美国产日韩在线观看 | 日韩欧美高清在线观看 | 国产69精品久久app免费版 | 日韩欧美高清视频在线观看 | av在线播放亚洲 | 国产精品11 | 国产精品情侣视频 | 亚洲成人网在线 | 免费看一及片 | 最近最新最好看中文视频 | 亚洲永久精品在线 | 99精品视频在线 | 亚洲精品自拍 | 久草免费电影 | 中文字幕乱码一区二区 | 丁香高清视频在线看看 | 久久精品中文字幕少妇 | 精品国产一区二区三区四区在线观看 | 日韩成人av在线 | 区一区二区三在线观看 | 久久亚洲欧美 | 四虎影视成人精品 | 国产精品永久免费视频 | 婷婷亚洲五月色综合 | 国产精品精品国产 | 日韩一级黄色大片 | 1000部18岁以下禁看视频 | 五月天av在线 | 欧美91精品国产自产 | 日韩网站中文字幕 | 99热九九这里只有精品10 | 亚洲视频大全 | 丁香九月婷婷综合 | 激情狠狠干 | 婷婷深爱 | 一区二区三区免费在线播放 | 在线观看视频在线观看 | 久久噜噜少妇网站 | 在线观看日本高清mv视频 | 中文字幕乱码日本亚洲一区二区 | 亚洲精品大片www | 国产美腿白丝袜足在线av | 超碰在线91 | 超碰97在线资源站 | 成人午夜电影久久影院 | 国产精品美乳一区二区免费 | 人人干人人草 | 欧美a√大片 | 免费a v在线 | 亚洲资源视频 | 亚洲年轻女教师毛茸茸 | 久久视频在线观看免费 | 国模精品在线 | 激情五月婷婷丁香 | 久久久免费精品国产一区二区 | 国产视频在线观看一区二区 | 在线久热 | 国内久久久 | 久久激情小视频 | 狠狠狠色丁香婷婷综合久久五月 | 五月天婷婷狠狠 | 国产一二三精品 | 国产视频999 | 男女啪啪网站 | 欧美日韩国产一区二区三区在线观看 | 久久国产精品99久久久久久老狼 | 久热电影| 欧美一二三专区 | 国产一区二区在线免费视频 | 五月婷婷色丁香 | 婷婷天天色 | 五月婷婷丁香在线观看 | 国产高清视频在线 | 亚洲四虎在线 | 99爱在线观看 | 97视频人人免费看 | 亚洲欧美视频在线播放 | 在线国产精品视频 | 美腿丝袜av | 97av.com| 久久国产午夜精品理论片最新版本 | av看片网| 欧美另类69 | 国产精品久久久久久久久搜平片 | 亚洲va韩国va欧美va精四季 | aav在线 | 精品国产人成亚洲区 | 国产精品亚洲人在线观看 | 国产精品无av码在线观看 | 午夜精品久久久久久久99 | 成人h在线播放 | 成人免费视频网 | 特片网久久 | 免费视频91 | 色视频一区 | 久久三级视频 | 国产96在线观看 | 久久亚洲免费视频 | 国产精品福利av | 亚洲一级影院 | 精品国产一区二区三区噜噜噜 | 久久一区国产 | 国产精品3 | 99这里都是精品 | 国产一级二级三级视频 | 五月天激情综合 | 特黄特色特刺激视频免费播放 | 成人黄色小说视频 | 亚洲综合视频网 | 日韩欧美在线一区二区 | 美女视频黄免费网站 | 玖草在线观看 | 中文字幕亚洲国产 | 婷婷丁香激情网 | 狠狠狠狠狠狠操 | 91精品国产99久久久久久久 | 欧美精品在线视频 | 欧美日韩免费网站 | 久久免费99精品久久久久久 | 99久久网站 | 麻豆91视频| 狠狠狠色丁香婷婷综合久久88 | 成人免费视频网址 | 日韩精品视频在线观看网址 | 人人爽人人爽人人爽人人爽 | 国产中文字幕免费 | 99久久日韩精品视频免费在线观看 | 国产精品麻豆欧美日韩ww | 视频二区 | 免费观看十分钟 | 亚洲美女视频在线观看 | 91免费网站在线观看 | 99婷婷| 江苏妇搡bbbb搡bbbb | www国产亚洲 | 午夜性盈盈 | 亚洲日本黄色 | 欧美伦理一区二区三区 | 国产69久久久 | 欧美午夜剧场 | 日韩久久久久久久久久 | 亚洲久草在线视频 | 国产香蕉在线 | 中文在线8资源库 | 99成人精品 | 国产一区二区精品久久91 | 日本久久精 | 一区二区高清在线 | 亚洲国产婷婷 | 在线看v片成人 | 成人资源网 | 国产精品久久久久久久久岛 | 久久综合中文色婷婷 | 欧美成年人在线观看 | 96国产在线| 国产精品一二 | 亚洲电影毛片 | 国产一级片毛片 | 96久久 | 99高清视频有精品视频 | 亚洲综合在线观看视频 | 日日碰狠狠躁久久躁综合网 | 午夜久久久精品 | 成人黄色片免费看 | 日本久久中文 | a黄在线观看 | 国产精品久久网站 | 久久久久久久久免费视频 | 国内精品中文字幕 | 91成熟丰满女人少妇 | 91麻豆精品国产91久久久无需广告 | 99久久9 | 国产精品黄色av | 最近中文字幕完整高清 | 成人黄色小说在线观看 | 丝袜足交在线 | 久久久久久久久久电影 | 日韩亚洲欧美中文字幕 | 色婷婷伊人| 麻豆国产露脸在线观看 | 在线看片视频 | 91禁看片 | 亚洲精品在线观 | 欧美日韩精品在线 | 久久婷亚洲五月一区天天躁 | 91成人免费视频 | 久久电影色 | 国产主播大尺度精品福利免费 | 久久精品伊人 | 极品中文字幕 | av手机在线播放 | 夜夜高潮夜夜爽国产伦精品 | 麻豆一区在线观看 | 99在线精品视频观看 | 日韩一三区 | 色先锋资源网 | 97天堂 | 国产色就色 | 天海冀一区二区三区 | 国产精品久久久久久久久久久久午夜 | 青春草免费在线视频 | 91一区二区三区在线观看 | 国产又粗又猛又爽又黄的视频先 | av在线电影免费观看 | 四虎在线免费观看 | av黄色成人| 欧美在线视频一区二区三区 | 欧美韩日视频 | 在线国产视频一区 | 国产精品毛片一区二区在线看 | 亚洲国内精品视频 | 久久综合中文字幕 | 黄色福利网 | 日韩激情片在线观看 | 午夜视频欧美 | 很黄很色很污的网站 | 久久任你操 | 婷婷久久婷婷 | 91精品国产自产在线观看 | 久久成人综合 | 国产一区二区手机在线观看 | 精品免费在线视频 | 西西444www高清大胆 | 成人va视频 | 亚洲电影在线看 | 国产精品 中文字幕 亚洲 欧美 | 精品久久久影院 | 国产r级在线观看 | 久草在线视频资源 | www.久久精品视频 | 婷婷六月天天 | 久久综合亚洲鲁鲁五月久久 | 九九视频这里只有精品 | 国产码电影 | 国产91亚洲精品 | 欧美国产高清 | 韩国av一区二区三区在线观看 | 亚洲少妇天堂 | 91看片在线免费观看 | 久久激五月天综合精品 | 日韩国产精品久久久久久亚洲 | 亚洲国内精品视频 | 91桃色国产在线播放 | 国产一区精品在线 | 香蕉手机在线 | 激情深爱 | 日韩在线观 | 国产成人一区二区啪在线观看 | 日韩在线观看视频中文字幕 | 久章草在线观看 | 国产精品在线看 | 精品欧美一区二区精品久久 | 日韩理论| 中文字幕在线观看一区 | 97麻豆视频| 99热超碰 | 国产一区二区视频在线播放 | 亚欧日韩成人h片 | 99久久精品国产一区二区三区 | 中文字幕一区2区3区 | 综合网在线视频 | 亚洲欧洲美洲av | 91精品国产99久久久久久红楼 | 亚洲作爱视频 | 国内久久精品视频 | 国产成人av| 久久艹在线观看 | 天天艹天天 | 成年人网站免费在线观看 | 久草在线电影网 | 少妇bbw撒尿 | 亚洲第一伊人 | 福利视频一区二区 | 精品福利在线观看 | 99久久影视 | 欧美日韩69 | 国产福利一区二区三区视频 | 狠狠躁夜夜躁人人爽超碰91 | 色综合天天天天做夜夜夜夜做 | 国产精品一区二区久久精品爱涩 | 国产精品九九九九九九 | 麻豆果冻剧传媒在线播放 | 国产精品不卡视频 | 成人aaa毛片 | 日本乱码在线 | 亚洲免费黄色 | 91私密视频 | 丝袜美女在线 | av福利超碰网站 | 三级动态视频在线观看 | 永久黄网站色视频免费观看w | 亚洲黄色av一区 | 在线观看你懂的网站 | 欧美aⅴ在线观看 | 国产中文字幕在线视频 | 国产一在线精品一区在线观看 | 麻豆va一区二区三区久久浪 | 久久免费看 | 亚洲精品午夜一区人人爽 | 亚洲一区二区三区毛片 | 国产精品一区二区在线看 | 美女网站黄在线观看 | 麻豆视频大全 | 国产字幕在线看 | 视频一区二区免费 | 99视频在线看 | 久久综合狠狠综合久久综合88 | 日韩系列 | 狠狠狠狠狠狠狠狠干 | 亚洲午夜久久久久久久久久久 | 最近2019中文免费高清视频观看www99 | 狠狠狠色丁香婷婷综合激情 | 亚色视频在线观看 | 日韩欧美在线影院 | 97av视频 | av丁香花 | 欧美日韩不卡一区 | 久久伦理 | 中文字幕亚洲欧美 | 欧美精品在线观看 | 国产日韩精品一区二区三区在线 | 日韩在线在线 | 97在线看片| av在线中文 | 国产福利91精品一区二区三区 | 国产一区二区三区四区在线 | 天天射天天爽 | 国产黄色观看 | 日本在线观看黄色 | 色噜噜日韩精品欧美一区二区 | 人人射人人爽 | 男女激情网址 | 99这里只有精品视频 | 精品二区视频 | 日韩欧美一区二区三区在线观看 | 成人网在线免费视频 | 久久公开免费视频 | 国产成人61精品免费看片 | 在线观看av中文字幕 | av在线播放亚洲 | av丝袜在线| 久久免费av电影 | 国产精品日韩欧美一区二区 | 国产日韩欧美网站 | 国产69精品久久app免费版 | 4hu视频| 国产小视频在线免费观看 | 五月天中文字幕mv在线 | 日韩性片| 97爱爱爱 | 亚洲无吗视频在线 | 99精品视频一区 | 99国产精品久久久久久久久久 | 91视频免费看网站 | 国产精品成人aaaaa网站 | 97福利社 | 五月天电影免费在线观看一区 | 国产亚洲精品美女 | 国产成人黄色av | www.久久久| 奇米影音四色 | 日韩 在线 | 久久黄色成人 | 国产精品无av码在线观看 | 日韩精品在线免费播放 | 久久久久久久久久福利 | 久久99精品国产99久久 | 亚洲成色777777在线观看影院 | 在线亚洲成人 | 久久久久久免费视频 | 午夜久久久久久久 | 在线观看中文 | 色成人亚洲网 | www.99久久.com| 久久久久久蜜av免费网站 | 在线免费观看黄色小说 | 91高清在线| 国产粉嫩在线观看 | 日韩视频一区二区 | 在线亚洲成人 | 久久免费观看视频 | 日韩中文字幕一区 | 成人久久久电影 | 麻豆一二| 色视频网页 | 99久久精品一区二区成人 | www.色的| 天天爱天天操 | 国内久久精品 | 日韩欧美精品一区二区 | 久久久久北条麻妃免费看 | 中文字幕在线网址 | 国产18精品乱码免费看 | 国产高h视频 | www亚洲国产 | 久久精品中文字幕一区二区三区 | 午夜视频在线观看一区二区三区 | 久久网站免费 | 久久久久久久久久久综合 | 天堂av高清 | 午夜视频在线观看欧美 | 日韩午夜一级片 | 久久99国产精品免费网站 | 四虎影视成人永久免费观看亚洲欧美 | 久久不见久久见免费影院 | www.97色.com| 日韩欧美精选 | av在线永久免费观看 | 在线观看的黄色 | 久久精品中文字幕一区二区三区 | 国产手机在线精品 | 欧美 日韩精品 | 在线观看av麻豆 | 天堂在线一区二区 | 日本中文字幕在线一区 | 人人澡人人爽欧一区 | 国产精品久久久久久久久久久久午夜 | 久久网站av | 久久精品在线免费观看 | 国产99视频在线观看 | 国产福利不卡视频 | 麻豆传媒视频在线免费观看 | 日韩在线视频网站 | 天天干天天操天天干 | 一级黄色电影网站 | 亚洲a成人v | 日韩网站一区二区 | 最新av在线播放 | 热久久免费视频精品 | av在线免费网站 | 久久在线免费观看视频 | 国产中文在线视频 | 国内精品小视频 | 中文字幕乱码日本亚洲一区二区 | 久久高清国产 | 国产精品av一区二区 | 国产精品视频大全 | 在线观看视频福利 | 日韩精品欧美专区 | 99视频国产精品免费观看 | 懂色av一区二区三区蜜臀 | 在线a人片免费观看视频 | 97成人资源 | 欧美性生活免费 | 日韩网站在线免费观看 | 黄色影院在线免费观看 | 欧美另类成人 | 99精品国产99久久久久久97 | 日韩午夜在线播放 | 亚洲三级影院 | 亚洲资源在线网 | 91精品久久久久久综合五月天 | 中文字幕乱在线伦视频中文字幕乱码在线 | 在线观看91av | av电影亚洲 | 亚洲高清视频在线播放 | 黄色的视频网站 | 成人小视频在线观看免费 | 日本中文字幕视频 | 国产r级在线观看 | 99精品国产高清在线观看 | 999视频在线播放 | 免费在线观看一级片 | 国产二区电影 | 激情久久久久 | .国产精品成人自产拍在线观看6 | 亚洲成人高清在线 | 国产成人精品日本亚洲999 | 日本久久久亚洲精品 | 国产精品国产毛片 | 亚洲a资源 | av大全在线 | 久久高清av| 国产精品11| 精品在线观看一区二区 | 国产精品久久99综合免费观看尤物 | 天天干夜夜爽 | 精产嫩模国品一二三区 | 精品国产乱码久久久久久1区2匹 | 天天操天天干天天操天天干 | 91成人区 | 麻豆传媒在线免费看 | 国产麻豆视频在线观看 | 一区二区三区在线观看中文字幕 | 天天干天天摸天天操 | 亚洲视频播放 | 国产女人免费看a级丨片 | 久久精品99国产精品亚洲最刺激 | 日韩av影视在线观看 | 18+视频网站链接 | 国产成人精品不卡 | 在线免费黄色片 | 午夜电影av | 热re99久久精品国产66热 | 在线视频观看国产 | 久久免费久久 | 九九精品在线观看 | 久艹在线观看视频 | 欧美日韩视频一区二区三区 | 日韩爱爱网站 | 国产网站在线免费观看 | 婷婷国产精品 | 亚洲国产精品推荐 | www.com黄色 | 97成人在线观看 | 国产精品9999 | 国产综合视频在线观看 | 亚洲精品一区二区精华 | 欧美成人按摩 | 日韩乱理 | 丁香色婷| 999视频精品 | 深夜免费网站 | 久久久高清免费视频 | 免费高清在线视频一区· | 久草视频免费观 | 国产精品久久久久永久免费 | www.亚洲在线| 激情综合网五月 | 婷婷成人亚洲综合国产xv88 | 亚洲国产欧洲综合997久久, | 欧美精品久 | 成人性生活大片 | 久草视频国产 | 中文字幕在线观看三区 | 二区视频在线 | 在线午夜电影神马影院 | 黄色片网站免费 | 午夜免费视频网站 | 91看片成人 | 久久综合九色综合97_ 久久久 | 日韩在线视频网站 | 一区二区三区视频在线 | 激情黄色av | 三级性生活视频 | 日韩精品视频在线免费观看 | 国产精品久久片 | 国产黄色片网站 | 欧美成年人在线视频 | 四虎免费在线观看视频 | 激情婷婷综合网 | 久久精品中文字幕一区二区三区 | 国产一区二区久久精品 | 人人狠狠综合久久亚洲 | 国产成人精品一区二区三区在线 | 国产一在线精品一区在线观看 | 国产精品久久久久久久久久尿 | 国产一区二区在线观看视频 | 亚洲综合涩 | av成人在线观看 | 亚洲精品mv在线观看 | 色偷偷888欧美精品久久久 | 91精品视频在线观看免费 | 精品视频免费观看 | 一级黄色大片 | 国产精品久久一 | 人人爽人人爱 | 在线精品一区二区 | 国产精品久久久一区二区 | 国产精品视频全国免费观看 | 97视频免费播放 | www.香蕉视频 | 国产一级二级三级在线观看 | 日韩免费在线观看视频 | 在线黄av| 欧美一区日韩一区 | 99成人精品 | 日韩一二三区不卡 | 国产精品女视频 | 国产精久久久 | 欧美精品久久久久久久久老牛影院 | av超碰免费在线 | 国产精品福利一区 | 综合天天 | 久久少妇av | 日韩成人中文字幕 | 欧美日韩在线网站 | 欧美视频www | 欧美日韩91 | av三级在线免费观看 | 五月天久久综合 | 天干啦夜天干天干在线线 | 婷婷久月 | 日韩高清精品一区二区 | 91视频 - 114av | 亚洲成av人片在线观看 | 91在线精品一区二区 | 99久久精品免费看国产麻豆 | 欧美成人精品三级在线观看播放 | 天天干天天操天天 | 在线观看一区视频 | 青青河边草免费观看完整版高清 | 国产精品久久久久久麻豆一区 | 天天干天天操天天拍 | 91九色国产在线 | 91香蕉视频色版 | 精品一区二区免费 | 岛国大片免费视频 | 99视频在线免费观看 | 91免费版在线观看 | 久久久精品网站 | 综合久久久久久久 | 日本精品在线看 | 国产在线不卡 | 综合网中文字幕 | 午夜精品久久久久久久久久久久久久 | 香蕉视频在线免费 | 在线免费观看麻豆视频 | 亚洲伦理中文字幕 | 黄色免费国产 | 欧美日韩视频一区二区 | 999久久久免费视频 午夜国产在线观看 | 在线观看亚洲免费视频 | www色网站 | 最近高清中文在线字幕在线观看 | 亚洲天堂网站视频 | 日韩精品免费一区二区三区 | 国产又粗又硬又长又爽的视频 | 91日韩在线专区 | 在线成人观看 | 亚洲国产手机在线 | 亚洲成a人片77777kkkk1在线观看 | 久久久久成人精品 | 亚洲欧洲久久久 | 成人在线一区二区三区 | 中文字幕 第二区 | 色综合久久久久久久久五月 | 国产极品尤物在线 | 国产精品免费不 | 成人国产精品 | 视频二区在线 | 91黄色在线看 | 69av视频在线观看 | 一区二区高清在线 | 日本91在线 | 亚洲一区二区91 | 国产视频不卡一区 | 亚洲精品福利在线观看 | 一区二区免费不卡在线 | 久久久福利影院 | 久久99视频 | 国产免费观看av | 中文字幕视频免费观看 | 7799av | 日韩高清在线看 | 91你懂的| 国产黄色免费看 | 欧美最新大片在线看 | 成人av在线观 | 成人毛片100免费观看 | 精品亚洲一区二区三区 | 国产视频色 | 黄色大片日本免费大片 | 丁香六月激情婷婷 | 久久一区国产 | 在线视频 成人 | 97国产在线视频 | 久久久久久国产一区二区三区 | v片在线看 | 最近免费中文字幕mv在线视频3 | 亚洲日本激情 | 国产一区二区不卡视频 | 麻豆国产网站入口 | 手机在线欧美 | 精品久久久久久电影 | 九九久久成人 | 免费观看性生交大片3 | 婷婷在线网站 | 久久99精品热在线观看 | 草久久久久久 | 久久精品一区二区三区中文字幕 | 国产精品丝袜久久久久久久不卡 | 国产精品久久久久久久久久免费看 | 国产一区在线免费观看 | 99久久99 | 毛片网站在线观看 | 人人澡超碰碰97碰碰碰软件 | 国产三级久久久 | 日韩资源在线播放 | 探花视频免费观看高清视频 | 91大神电影| 国产一级片观看 | www.夜夜操.com| 国产精品九九九 | 3d黄动漫免费看 | a极黄色片 | 在线一区二区三区 | 在线观看黄色av | 中文字幕在线观看完整版 | 人人射人人 | 亚洲伦理一区 | 三级黄色大片在线观看 | 日韩精品一区二区三区不卡 | 狠狠色丁香九九婷婷综合五月 | 日韩一区二区三区免费视频 | 国产三级视频在线 | 狠狠干天天色 | 91理论片午午伦夜理片久久 | 国产日韩精品一区二区 | 麻豆视频国产精品 | 911久久| 97超碰在线免费 | 激情久久久 | 亚洲综合欧美日韩狠狠色 | 91热| 日韩网站在线免费观看 | 亚洲天天综合 | 在线视频手机国产 | 欧美在线视频二区 | 日本三级香港三级人妇99 | 免费av网站在线 | 丝袜av一区| 亚洲精品在线观看不卡 | 在线免费色 | 美女黄色网在线播放 | 国产中文字幕在线看 | 国产超碰在线观看 | 久久免费播放视频 | 亚洲天堂网站 | 国产视频二区三区 | 日韩有码中文字幕在线 | 国产三级精品三级在线观看 | 日韩在线观看免费 | 国产精品久久99综合免费观看尤物 | 国产精品一区二区三区视频免费 | 日韩免费看的电影 | 久久久久久久久久久免费av | 久久免费视频4 | 日韩在线观看视频一区二区三区 | 亚洲1级片 | 天堂麻豆 | 久草视频免费在线播放 | 久久无码av一区二区三区电影网 | 国内精品美女在线观看 | 国产精品麻豆视频 | 免费在线观看中文字幕 | 91久久国产自产拍夜夜嗨 | 国产精品久久久久久爽爽爽 | 亚洲日本在线一区 | 久久久免费少妇 | 国产九九九精品视频 | 日日干天夜夜 | av在线播放快速免费阴 | 香蕉免费在线 | 视频在线一区二区三区 | free,性欧美 九九交易行官网 | 亚洲国产中文在线观看 | 日日夜夜人人精品 | 国产精品不卡 | 中文字幕av免费观看 | 九九热.com | 国产小视频免费观看 | 亚洲有 在线 | 欧美日韩视频在线 | 国产精品福利无圣光在线一区 | 中文字幕在线中文 | 人人射人人插 | 欧美日韩免费观看一区二区三区 | 亚洲国产精品久久 | 国产精品a级 | 国产精品嫩草影院99网站 | av在线亚洲天堂 | 色吊丝在线永久观看最新版本 | 久久夜色精品国产欧美乱 | 黄色片网站免费 | 97超碰人人| 亚洲国产影院av久久久久 | 69精品| 最近最新中文字幕视频 | 国产一区二区精品久久91 | 午夜男人影院 | 国产精品久久久久久久久久三级 | 精品黄色在线 | 久久精品视频国产 | 97狠狠操 | 国产美女视频免费 | 久久久精品影视 | 国产日韩欧美综合在线 | 久久精品欧美日韩精品 | 日本中文一级片 | 九色91av| 久久精品视频在线看 | 久久视频 | 中文字幕高清 | 97在线观看免费观看 | av免费电影在线 | 国产成人免费在线观看 | 伊人av综合 | 一区二区三区高清 | 麻豆视频免费在线播放 | 天天碰天天操视频 | 国产黄色免费看 | 91免费观看视频在线 | 国产精品一区二区三区久久 | 9999在线观看| 日本mv大片欧洲mv大片 | 久久99国产综合精品免费 | 中文字幕在线观看第一页 | 欧美成人h版电影 | 成人av免费在线观看 | 欧美婷婷综合 | 香蕉影视在线观看 | 日韩免费一区二区三区 | 婷婷六月丁香激情 | 国产精品成人免费精品自在线观看 | 亚洲性少妇性猛交wwww乱大交 | 亚洲国产经典视频 | 国产人成精品一区二区三 | 91大神在线观看视频 | 久久激情视频免费观看 | 日本精品一区二区三区在线播放视频 | 91精品国产网站 | 黄色亚洲在线 | 久久特级毛片 | 久久好看免费视频 | 精品欧美乱码久久久久久 | 欧美日韩国产xxx | 麻豆视频免费入口 | 香蕉视频在线网站 | 久久综合九色九九 | 久久成人资源 | 国产在线超碰 | 国产精品九九视频 | 久久精品视频一 | 91麻豆精品国产91久久久更新时间 | 国产精品1024 | 国产成人精品不卡 | 国产黄色片免费在线观看 | 九九久久国产 | 日韩在线观看的 | 国产看片免费 | 麻豆传媒视频在线免费观看 | 天天干天天拍 | 成人av资源网站 | 97人人澡人人添人人爽超碰 | 91麻豆精品国产91久久久久久 | 中文字幕在线网址 | 国产成视频在线观看 | 国产精品久久久久久久久久久杏吧 | 久久免费成人精品视频 | 97超视频在线观看 | 精品人妖videos欧美人妖 | 久久久久久福利 | 国产99在线免费 | 玖玖爱国产在线 | 亚洲在线视频播放 | 久久激五月天综合精品 | 99这里只有久久精品视频 | 97视频久久久 | 久久99精品久久久久婷婷 | 一区二区三区国产欧美 | 91黄色小视频 | 香蕉视频久久 | 国产一级二级在线观看 | 国产一级在线免费观看 | 黄色毛片网站在线观看 | 国产精品久久久久久久久久了 | 69久久夜色精品国产69 | 婷婷五综合 | 亚洲好视频 | 国产三级香港三韩国三级 | 久久久婷 | 免费在线成人av | 国产精品一区二区久久精品 | 97精品欧美91久久久久久 | 日韩有码中文字幕在线 | 久久亚洲精品国产亚洲老地址 | 久99久精品| 毛片二区| 黄色大全免费网站 | 天天操人人要 | av网站手机在线观看 | av中文字幕在线免费观看 | 97色在线观看免费视频 | 五月天com | 在线亚洲人成电影网站色www | 在线免费观看黄色 | 91免费黄视频 |