《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > Android提高應用篇之模擬信號示波器
Android提高應用篇之模擬信號示波器
摘要: 本文結合SurfaceView實現一個Android版的手機模擬信號示波器(PS:以前也講過J2ME版的手機示波器)。最近物聯網炒得很火,作為手機軟件開發者,如何在不修改手機硬件電路的前提下實現與第三方傳感器結合呢?
Abstract:
Key words :

本文結合SurfaceView實現一個Android版的手機模擬信號示波器(PS:以前也講過J2ME版的手機示波器)。最近物聯網炒得很火,作為手機軟件開發者,如何在不修改手機硬件電路的前提下實現與第三方傳感器結合呢?麥克風就是一個很好的ADC接口,通過麥克風與第三方傳感器結合,再在軟件里對模擬信號做相應的處理,就可以提供更豐富的傳感化應用。

先來看看本文程序運行的效果圖(屏幕錄像速度較慢,真機實際運行起來會更加流暢):

 

       本文程序使用8000hz的采樣率,對X軸方向繪圖的實時性要求較高,如果不降低X軸的分辨率,程序的實時性較差,因此程序對X軸數據縮小區間為8倍~16倍。由于采用16位采樣,因此Y軸數據的高度相對于手機屏幕來說也偏大,程序也對Y軸數據做縮小,區間為1倍~10倍。在SurfaceView的OnTouchListener方法里加入了波形基線的位置調節,直接在SurfaceView控件上觸摸即可控制整體波形偏上或偏下顯示。

main.xml源碼如下:

view plaincopy to clipboardprint?
 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
            android:layout_height="wrap_content" android:layout_width="fill_parent" 
        android:orientation="horizontal"> 
        
        
                    android:layout_height="wrap_content" android:id="@+id/zctlX"> 
                    android:layout_height="wrap_content" android:id="@+id/zctlY"> 
     
            android:layout_height="fill_parent" android:layout_width="fill_parent"> 
 

 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
   android:layout_height="wrap_content" android:layout_width="fill_parent"
  android:orientation="horizontal">
  
  
     android:layout_height="wrap_content" android:id="@+id/zctlX">
     android:layout_height="wrap_content" android:id="@+id/zctlY">
 
   android:layout_height="fill_parent" android:layout_width="fill_parent">

 

ClsOscilloscope.java是實現示波器的類庫,包含AudioRecord操作線程和SurfaceView繪圖線程的實現,兩個線程同步操作,代碼如下:

view plaincopy to clipboardprint?
package com.testOscilloscope;  
import java.util.ArrayList;  
import android.graphics.Canvas;  
import android.graphics.Color;  
import android.graphics.Paint;  
import android.graphics.Rect;  
import android.media.AudioRecord;  
import android.view.SurfaceView;  
public class ClsOscilloscope {  
    private ArrayList inBuf = new ArrayList();  
    private boolean isRecording = false;// 線程控制標記  
    /** 
     * X軸縮小的比例 
     */ 
    public int rateX = 4;  
    /** 
     * Y軸縮小的比例 
     */ 
    public int rateY = 4;  
    /** 
     * Y軸基線 
     */ 
    public int baseLine = 0;  
    /** 
     * 初始化 
     */ 
    public void initOscilloscope(int rateX, int rateY, int baseLine) {  
        this.rateX = rateX;  
        this.rateY = rateY;  
        this.baseLine = baseLine;  
    }  
    /** 
     * 開始 
     *  
     * @param recBufSize 
     *            AudioRecord的MinBufferSize 
     */ 
    public void Start(AudioRecord audioRecord, int recBufSize, SurfaceView sfv,  
            Paint mPaint) {  
        isRecording = true;  
        new RecordThread(audioRecord, recBufSize).start();// 開始錄制線程  
        new DrawThread(sfv, mPaint).start();// 開始繪制線程  
    }  
    /** 
     * 停止 
     */ 
    public void Stop() {  
        isRecording = false;  
        inBuf.clear();// 清除  
    }  
    /** 
     * 負責從MIC保存數據到inBuf 
     *  
     * @author GV 
     *  
     */ 
    class RecordThread extends Thread {  
        private int recBufSize;  
        private AudioRecord audioRecord;  
        public RecordThread(AudioRecord audioRecord, int recBufSize) {  
            this.audioRecord = audioRecord;  
            this.recBufSize = recBufSize;  
        }  
        public void run() {  
            try {  
                short[] buffer = new short[recBufSize];  
                audioRecord.startRecording();// 開始錄制  
                while (isRecording) {  
                    // 從MIC保存數據到緩沖區  
                    int bufferReadResult = audioRecord.read(buffer, 0,  
                            recBufSize);  
                    short[] tmpBuf = new short[bufferReadResult / rateX];  
                    for (int i = 0, ii = 0; i < tmpBuf.length; i++, ii = i  
                            * rateX) {  
                        tmpBuf[i] = buffer[ii];  
                    }  
                    synchronized (inBuf) {//  
                        inBuf.add(tmpBuf);// 添加數據  
                    }  
                }  
                audioRecord.stop();  
            } catch (Throwable t) {  
            }  
        }  
    };  
    /** 
     * 負責繪制inBuf中的數據 
     *  
     * @author GV 
     *  
     */ 
    class DrawThread extends Thread {  
        private int oldX = 0;// 上次繪制的X坐標  
        private int oldY = 0;// 上次繪制的Y坐標  
        private SurfaceView sfv;// 畫板  
        private int X_index = 0;// 當前畫圖所在屏幕X軸的坐標  
        private Paint mPaint;// 畫筆  
        public DrawThread(SurfaceView sfv, Paint mPaint) {  
            this.sfv = sfv;  
            this.mPaint = mPaint;  
        }  
        public void run() {  
            while (isRecording) {  
                ArrayList buf = new ArrayList();  
                synchronized (inBuf) {  
                    if (inBuf.size() == 0)  
                        continue;  
                    buf = (ArrayList) inBuf.clone();// 保存  
                    inBuf.clear();// 清除  
                }  
                for (int i = 0; i < buf.size(); i++) {  
                    short[] tmpBuf = buf.get(i);  
                    SimpleDraw(X_index, tmpBuf, rateY, baseLine);// 把緩沖區數據畫出來  
                    X_index = X_index + tmpBuf.length;  
                    if (X_index > sfv.getWidth()) {  
                        X_index = 0;  
                    }  
                }  
            }  
        }  
        /** 
         * 繪制指定區域 
         *  
         * @param start 
         *            X軸開始的位置(全屏) 
         * @param buffer 
         *            緩沖區 
         * @param rate 
         *            Y軸數據縮小的比例 
         * @param baseLine 
         *            Y軸基線 
         */ 
        void SimpleDraw(int start, short[] buffer, int rate, int baseLine) {  
            if (start == 0)  
                oldX = 0;  
            Canvas canvas = sfv.getHolder().lockCanvas(  
                    new Rect(start, 0, start + buffer.length, sfv.getHeight()));// 關鍵:獲取畫布  
            canvas.drawColor(Color.BLACK);// 清除背景  
            int y;  
            for (int i = 0; i < buffer.length; i++) {// 有多少畫多少  
                int x = i + start;  
                y = buffer[i] / rate + baseLine;// 調節縮小比例,調節基準線  
                canvas.drawLine(oldX, oldY, x, y, mPaint);  
                oldX = x;  
                oldY = y;  
            }  
            sfv.getHolder().unlockCanvasAndPost(canvas);// 解鎖畫布,提交畫好的圖像  
        }  
    }  

package com.testOscilloscope;
import java.util.ArrayList;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.media.AudioRecord;
import android.view.SurfaceView;
public class ClsOscilloscope {
 private ArrayList inBuf = new ArrayList();
 private boolean isRecording = false;// 線程控制標記
 /**
  * X軸縮小的比例
  */
 public int rateX = 4;
 /**
  * Y軸縮小的比例
  */
 public int rateY = 4;
 /**
  * Y軸基線
  */
 public int baseLine = 0;
 /**
  * 初始化
  */
 public void initOscilloscope(int rateX, int rateY, int baseLine) {
  this.rateX = rateX;
  this.rateY = rateY;
  this.baseLine = baseLine;
 }
 /**
  * 開始
  *
  * @param recBufSize
  *            AudioRecord的MinBufferSize
  */
 public void Start(AudioRecord audioRecord, int recBufSize, SurfaceView sfv,
   Paint mPaint) {
  isRecording = true;
  new RecordThread(audioRecord, recBufSize).start();// 開始錄制線程
  new DrawThread(sfv, mPaint).start();// 開始繪制線程
 }
 /**
  * 停止
  */
 public void Stop() {
  isRecording = false;
  inBuf.clear();// 清除
 }
 /**
  * 負責從MIC保存數據到inBuf
  *
  * @author GV
  *
  */
 class RecordThread extends Thread {
  private int recBufSize;
  private AudioRecord audioRecord;
  public RecordThread(AudioRecord audioRecord, int recBufSize) {
   this.audioRecord = audioRecord;
   this.recBufSize = recBufSize;
  }
  public void run() {
   try {
    short[] buffer = new short[recBufSize];
    audioRecord.startRecording();// 開始錄制
    while (isRecording) {
     // 從MIC保存數據到緩沖區
     int bufferReadResult = audioRecord.read(buffer, 0,
       recBufSize);
     short[] tmpBuf = new short[bufferReadResult / rateX];
     for (int i = 0, ii = 0; i < tmpBuf.length; i++, ii = i
       * rateX) {
      tmpBuf[i] = buffer[ii];
     }
     synchronized (inBuf) {//
      inBuf.add(tmpBuf);// 添加數據
     }
    }
    audioRecord.stop();
   } catch (Throwable t) {
   }
  }
 };
 /**
  * 負責繪制inBuf中的數據
  *
  * @author GV
  *
  */
 class DrawThread extends Thread {
  private int oldX = 0;// 上次繪制的X坐標
  private int oldY = 0;// 上次繪制的Y坐標
  private SurfaceView sfv;// 畫板
  private int X_index = 0;// 當前畫圖所在屏幕X軸的坐標
  private Paint mPaint;// 畫筆
  public DrawThread(SurfaceView sfv, Paint mPaint) {
   this.sfv = sfv;
   this.mPaint = mPaint;
  }
  public void run() {
   while (isRecording) {
    ArrayList buf = new ArrayList();
    synchronized (inBuf) {
     if (inBuf.size() == 0)
      continue;
     buf = (ArrayList) inBuf.clone();// 保存
     inBuf.clear();// 清除
    }
    for (int i = 0; i < buf.size(); i++) {
     short[] tmpBuf = buf.get(i);
     SimpleDraw(X_index, tmpBuf, rateY, baseLine);// 把緩沖區數據畫出來
     X_index = X_index + tmpBuf.length;
     if (X_index > sfv.getWidth()) {
      X_index = 0;
     }
    }
   }
  }
  /**
   * 繪制指定區域
   *
   * @param start
   *            X軸開始的位置(全屏)
   * @param buffer
   *            緩沖區
   * @param rate
   *            Y軸數據縮小的比例
   * @param baseLine
   *            Y軸基線
   */
  void SimpleDraw(int start, short[] buffer, int rate, int baseLine) {
   if (start == 0)
    oldX = 0;
   Canvas canvas = sfv.getHolder().lockCanvas(
     new Rect(start, 0, start + buffer.length, sfv.getHeight()));// 關鍵:獲取畫布
   canvas.drawColor(Color.BLACK);// 清除背景
   int y;
   for (int i = 0; i < buffer.length; i++) {// 有多少畫多少
    int x = i + start;
    y = buffer[i] / rate + baseLine;// 調節縮小比例,調節基準線
    canvas.drawLine(oldX, oldY, x, y, mPaint);
    oldX = x;
    oldY = y;
   }
   sfv.getHolder().unlockCanvasAndPost(canvas);// 解鎖畫布,提交畫好的圖像
  }
 }
}
 

testOscilloscope.java是主程序,控制UI和ClsOscilloscope,代碼如下:

view plaincopy to clipboardprint?
package com.testOscilloscope;  
import android.app.Activity;  
import android.graphics.Color;  
import android.graphics.Paint;  
import android.media.AudioFormat;  
import android.media.AudioRecord;  
import android.media.MediaRecorder;  
import android.os.Bundle;  
import android.view.MotionEvent;  
import android.view.SurfaceView;  
import android.view.View;  
import android.view.View.OnTouchListener;  
import android.widget.Button;  
import android.widget.ZoomControls;  
public class testOscilloscope extends Activity {  
    /** Called when the activity is first created. */ 
    Button btnStart,btnExit;  
    SurfaceView sfv;  
    ZoomControls zctlX,zctlY;  
      
    ClsOscilloscope clsOscilloscope=new ClsOscilloscope();  
      
    static final int frequency = 8000;//分辨率  
    static final int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;  
    static final int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;  
    static final int xMax = 16;//X軸縮小比例最大值,X軸數據量巨大,容易產生刷新延時  
    static final int xMin = 8;//X軸縮小比例最小值  
    static final int yMax = 10;//Y軸縮小比例最大值  
    static final int yMin = 1;//Y軸縮小比例最小值  
      
    int recBufSize;//錄音最小buffer大小  
    AudioRecord audioRecord;  
    Paint mPaint;  
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        //錄音組件  
        recBufSize = AudioRecord.getMinBufferSize(frequency,  
                channelConfiguration, audioEncoding);  
        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency,  
                channelConfiguration, audioEncoding, recBufSize);  
        //按鍵  
        btnStart = (Button) this.findViewById(R.id.btnStart);  
        btnStart.setOnClickListener(new ClickEvent());  
        btnExit = (Button) this.findViewById(R.id.btnExit);  
        btnExit.setOnClickListener(new ClickEvent());  
        //畫板和畫筆  
        sfv = (SurfaceView) this.findViewById(R.id.SurfaceView01);   
        sfv.setOnTouchListener(new TouchEvent());  
        mPaint = new Paint();    
        mPaint.setColor(Color.GREEN);// 畫筆為綠色    
        mPaint.setStrokeWidth(1);// 設置畫筆粗細   
        //示波器類庫  
        clsOscilloscope.initOscilloscope(xMax/2, yMax/2, sfv.getHeight()/2);  
          
        //縮放控件,X軸的數據縮小的比率高些  
        zctlX = (ZoomControls)this.findViewById(R.id.zctlX);  
        zctlX.setOnZoomInClickListener(new View.OnClickListener() {  
            @Override 
            public void onClick(View v) {  
                if(clsOscilloscope.rateX>xMin)  
                    clsOscilloscope.rateX--;  
                setTitle("X軸縮小"+String.valueOf(clsOscilloscope.rateX)+"倍" 
                        +","+"Y軸縮小"+String.valueOf(clsOscilloscope.rateY)+"倍");  
            }  
        });  
        zctlX.setOnZoomOutClickListener(new View.OnClickListener() {  
            @Override 
            public void onClick(View v) {  
                if(clsOscilloscope.rateX                    clsOscilloscope.rateX++;      
                setTitle("X軸縮小"+String.valueOf(clsOscilloscope.rateX)+"倍" 
                        +","+"Y軸縮小"+String.valueOf(clsOscilloscope.rateY)+"倍");  
            }  
        });  
        zctlY = (ZoomControls)this.findViewById(R.id.zctlY);  
        zctlY.setOnZoomInClickListener(new View.OnClickListener() {  
            @Override 
            public void onClick(View v) {  
                if(clsOscilloscope.rateY>yMin)  
                    clsOscilloscope.rateY--;  
                setTitle("X軸縮小"+String.valueOf(clsOscilloscope.rateX)+"倍" 
                        +","+"Y軸縮小"+String.valueOf(clsOscilloscope.rateY)+"倍");  
            }  
        });  
          
        zctlY.setOnZoomOutClickListener(new View.OnClickListener() {  
            @Override 
            public void onClick(View v) {  
                if(clsOscilloscope.rateY                    clsOscilloscope.rateY++;      
                setTitle("X軸縮小"+String.valueOf(clsOscilloscope.rateX)+"倍" 
                        +","+"Y軸縮小"+String.valueOf(clsOscilloscope.rateY)+"倍");  
            }  
        });  
    }  
    @Override 
    protected void onDestroy() {  
        super.onDestroy();  
        android.os.Process.killProcess(android.os.Process.myPid());  
    }  
      
    /** 
     * 按鍵事件處理 
     * @author GV 
     * 
     */ 
    class ClickEvent implements View.OnClickListener {  
        @Override 
        public void onClick(View v) {  
            if (v == btnStart) {  
                clsOscilloscope.baseLine=sfv.getHeight()/2;  
                clsOscilloscope.Start(audioRecord,recBufSize,sfv,mPaint);  
            } else if (v == btnExit) {  
                clsOscilloscope.Stop();  
            }  
        }  
    }  
    /** 
     * 觸摸屏動態設置波形圖基線 
     * @author GV 
     * 
     */ 
    class TouchEvent implements OnTouchListener{  
        @Override 
        public boolean onTouch(View v, MotionEvent event) {  
            clsOscilloscope.baseLine=(int)event.getY();  
            return true;  
        }  
          
    }  

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 天天av天天干 | 久久久成人精品 | 一区二区三区免费看 | 久久91精品 | 亚洲综合国产一区二区三区 | 三级三级久久三级久久18 | theporn国产在线精品 | 91精品国产综合久久久蜜臀 | 好吊妞视频这里有精品 | 亚洲乱码国产乱码精品天美传媒 | 亚洲综合在线另类色区奇米 | 国内精品视频 | 国产手机在线αⅴ片无码观看 | 果冻传媒mv国产董小宛主演是谁 | av无码不卡在线观看免费 | 亚洲欧洲视频在线 | 日韩av中文字幕在线免费观看 | 亚洲综合p| 5x社区sq未满十八视频在线 | av大片免费观看 | 人善交精品播放 | 亚洲 丝袜 另类 动漫 二区 | 国产爆乳无码av在线播放 | 国产午夜精品av一区二区麻豆 | 青娱乐国产视频 | 一级特黄av | 成年人视频网站 | 久久99久久99精品中文字幕 | 国产香港明星裸体xxxx视频 | 麻豆视频在线观看免费网站黄 | 91网站在线观看视频 | www国产亚洲精品 | 精品国产31久久久久久 | 美女18禁一区二区三区视频 | 天堂资源地址在线 | 色婷婷狠| 久久久久日韩精品久久久男男 | 精品熟女碰碰人人a久久 | 亚婷婷洲av久久蜜臀小说 | www视频在线观看免费 | 大吊日肥婆视频 | 欧美人与性动交α欧美精品 | 亚洲综合另类小说色区一 | 青青青看免费视频在线 | 丝袜老师办公室里做好紧好爽 | 无码国产激情在线观看 | 欧美3p激情一区二区三区猛视频 | 就要爱爱tv| 成年女性特黄午夜视频免费看 | 精品xxxxx| 无套内谢少妇露脸 | 国产成人一区在线观看 | 国产色在线观看 | 美女av免费观看 | 性色av一区二区三区无码 | 丝瓜色版 | 久久久久久久久久久久久久久久久久久久 | 午夜激情一区二区 | 国产精品不卡无码av在线播放 | 日韩精品一区二区三区四区视频 | 亚洲欧美日韩成人高清在线一区 | 91av成人| 国产啪亚洲国产精品无码 | 网红日批视频 | 精品人妻中文字幕有码在线 | 亚洲大尺度在线 | 精品久久久久久久人人人人传媒 | 麻豆人妻少妇精品无码专区 | 婷婷第四色 | 亚洲v欧美| 午夜福利试看120秒体验区 | 国产做爰全过程免费视频 | 国产成人无码a区在线观看视频 | 久久久久久久国产免费看 | 国产精品丝袜www爽爽爽 | 美日韩三级 | 有奶水的迷人少妇 | 91女神在线 | 国产精品丝袜久久久久久久不卡 | 依依成人综合网 | 亚洲精品久久久久久久久久久久久 | 岳狂躁岳丰满少妇大叫 | 亚洲精品免费在线观看 | 国产精品久久久久国产a级 国产精品久久久久国产三级传媒 | 亚洲第一色 | 在线精品视频免费观看 | 久久久久久久久女人体 | 国产播放隔着超薄丝袜进入 | 2021中文字幕在线观看 | 女人裸体性做爰视频 | www.看毛片| 成人区人妻精品一区二区不卡 | 比色毛片 | av在线免费播放网址 | 青草视频在线播放 | 大尺度激情吻胸视频 | 国产一区二区三区四区三区 | 久久久妇女国产精品影视 | 性生交大片免费全片 | 淫欲av| 一边摸一边抽搐一进一出视频 | 日韩精品短视频 | 久久精品一区二区三区中文字幕 | 国产麻豆剧果冻传媒星空视频 | 免费无码作爱视频 | 国产成人综合在线女婷五月99播放 | 中文字幕综合 | 久久久久国精品产熟女久色 | 久色视频在线播放 | 国产一区久久 | 欧美bbbbbbbbbbbb精品 | 日韩欧群交p片内射中文 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | 俺来俺也去www色在线观看 | 毛片在线视频播放 | 日韩一区二区三区视频 | 国产精品久久久久久久免费看 | juliaann精品艳妇在线 | 国产一区福利 | 成人羞羞国产免费图片 | 日本少妇bbwbbw精品 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 91嫩草国产线观看亚洲一区二区 | av丁香 | 国产一级黄色大片 | 丁香色欲久久久久久综合网 | 亚洲日韩国产中文其他 | 免费成人在线播放 | 久久精品一区二区视频 | 日韩美女中文字幕 | 国产一区二区三区成人久久片老牛 | 性生交大片免费看网站 | 一区二区亚洲精品国产精华液 | 国产精品久久久久永久免费 | av福利在线 | 在线观看一区二区视频 | 40岁丰满东北少妇毛片 | 国产毛片又黄又爽 | 两男一女3p揉着她的奶视频 | 亚洲自拍偷拍一区二区三区 | 久久久黄色大片 | 视频在线国产 | 国产区一区 | 91人人爽| 聚色视频| 综合五月激情二区视频 | www久久爱白液流出h好爽 | 午夜av网址 | 亚洲图片欧美激情 | 欧美日韩色图片 | 欧美日韩精品一二三区 | 全球欧美hd极品4kvr | 337p粉嫩大胆色噜噜噜 | 成人性视频免费看的鲁片 | 自拍偷拍另类 | 国产精品久久久久aaaa九色 | av明星换脸无码精品区 | 久草视频在线播放 | 青青草视频免费看 | 日韩放荡少妇无码视频 | 国产高清一区二区三区四区 | 久久色播 | 亚洲欭美日韩颜射在线二 | 欧美精品偷自拍另类在线观看 | 久久成人精品视频 | 中文字幕人成乱码在线观看 | 国产又粗又长又黄视频 | 2018国产大陆天天弄 | 精品国产一区二区三区久久 | 国产999精品久久久影片官网 | 国产欧美精品国产国产专区 | 波多野结衣一区二区 | 蜜臀av免费一区二区三区 | 免费在线观看a级片 | 亚洲国产福利 | 国产麻豆精品一区 | 国产日产亚洲系列最新 | 精品动漫av | 最近中文在线观看 | 亚洲码欧美码一区二区三区 | 中文字幕人成人乱码亚洲电影 | 日本在线一级片 | 韩国三级中文字幕hd | 国产高清精品软件丝瓜软件 | 麻豆国产一区二区三区四区 | 亚洲性猛交xxxx | 亚洲欧美激情另类校园 | 日韩精品字幕 | 国产人妖cd在线看网站 | 久草剧场| 国产啊v在线观看 | 免费观看a级毛片在线播放 免费观看a级片 | 亚洲网站av | 欧美综合视频在线观看 | 色吊丝一区二区 | 天天干狠狠 | 夜夜嗨av一区二区三区四区 | 狠狠综合久久av一区二区 | 国产成人无码a区在线观看导航 | 电车侵犯高潮失禁在线看 | 免费观看bbb毛片大全 | 久久久久成人片免费观看蜜芽 | 恶虐女帝安卓汉化版最新版本 | 久久久综合香蕉尹人综合网 | 少妇又色又紧又爽又刺激视频 | 久久久中文网 | 特级aaaaaaaaa毛片免费视频 | 免费网站在线高清观看 | 国产乱码精品一区二区三区中文 | 五月天婷婷在线观看 | 免费在线播放黄色片 | 色噜噜狠狠成人中文 | 日本淫片免费啪啪3 | 精品亚洲麻豆1区2区3区 | 懂色av一区二区三区在线播放 | www.69视频 | 美女av免费 | 国产精品va在线观看无码 | 欧美黑人xxxx高潮猛交 | 熟女少妇a性色生活片毛片 熟人妇女无乱码中文字幕 熟透的岳跟岳弄了69视频 | 乱码丰满人妻一二三区 | 超碰在线人人 | 强制中出し~大桥未久在线a | 久久不卡日韩美女 | 这里有精品视频 | 四虎影视永久地址www成人 | 欧美精品色 | 国产精品爽爽 | 欧美精品 日韩 | 亚洲自拍偷拍欧美 | 国产黑丝一区 | 国产成人精品一区二区三区在线观看 | 日本一区二区在线免费 | 男人吃奶摸下挵进去好爽 | 特级做a爰片毛片免费69 | 91久久香蕉国产日韩欧美9色 | 亚洲黄色在线视频 | 国产精品久久精品第一页 | 狠狠色狠狠色综合 | 国精品午夜福利视频不卡 | 免费av手机在线观看 | 美女视频黄免费看 | 日韩精品一卡2卡3卡4卡乱码的功能 | 国产在线精品一区二区 | 亚洲浮力影院久久久久久 | 99视频一区二区 | 国产99久久久国产 | 国产精品久久久久久爽爽爽床戏 | 嫩草午夜少妇在线影视 | 乱人伦人妻中文字幕不卡 | 久久久一本精品99久久精品66 | 真实偷拍激情啪啪对白 | 亚洲国产va精品久久久不卡综合 | 免费在线黄 | 国产成人av免费网址 | 用舌头去添高潮无码视频 | 性高湖久久久久久久久aaaaa | 无码免费中文字幕视频 | 精品视频免费 | 又黄又爽又高潮免费毛片 | 精品国产乱码久久久久夜 | 日韩免费大片 | 东北少妇不戴套对白第一次 | 一个色亚洲 | 欧美日韩中文国产 | 又粗又大又硬又长又爽 | 999久久久国产精品消防器材 | 67194熟妇在线观看线路1 | 欧美乱妇高清无乱码在线观看 | 国产又大又黄又猛 | 97视频人人免费看 | av播播| 日本公与丰满熄的 | 五月深爱 | 久久久久久毛片精品免费不卡 | 精品国产露脸对白在线观看 | 国产免费网站在线观看 | 国产精品自在自线视频 | 国产成人精品三上悠亚 | 成av人电影在线观看 | 国产性猛交xxxⅹ交酡全过程 | 两根大肉大捧一进一出好爽视频 | 五月天天色 | 91精品久久久久久综合乱菊 | 久久勉费视频 | 日韩国产二区 | 国产福利免费在线观看 | 麻豆av片| 激情第四色| 俄罗斯美女真人性做爰 | 8x8ⅹ8成人免费视频观看 | www一区二区www免费 | 天天操天天操天天操天天 | 又粗又猛又爽又黄少妇视频网站 | 狠狠躁夜夜躁人人躁婷婷视频 | 亚洲一区视频网站 | 亚洲区一 | 中文字幕人妻高清乱码 | 亚洲国产欧美日韩在线 | 日本在线中文 | 久热欧美 | 日本美女性生活视频 | 伊人91视频 | 成人免费在线看片 | 国产成人免费9x9x | 人妻无码不卡中文字幕系列 | 日本aaaaa级毛片片 | 国产精品入口66mio男同 | 午夜激情视频在线播放 | 成人毛片在线视频 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 狠狠草视频| 国产成年无码v片在线 | 韩国明星乱淫(高h)小说 | 国产无套粉嫩白浆内谢在a 国产无套粉嫩白浆内谢在线 | 深夜免费福利视频 | 欧美激情导航 | 国产sm网站| 337p粉嫩大胆噜噜噜亚瑟影院 | 久久久久久久国产精品毛片 | 少妇饥渴偷公乱第75章 | 麻豆精品乱码一二三区别蜜臀在线 | 欧美日韩三 | 看黄网站在线观看 | 内射巨臀欧美在线视频 | 国产高清一区二区三区视频 | 精品国产va久久久久久久 | 超碰人人人人人人人 | 全黄h全肉短篇禁乱最新章节 | 久草资源网 | 欧美日韩高清在线播放 | 欧美最猛性xxxⅹ丝袜 | 成年人爱爱视频 | 制服 丝袜 综合 日韩 欧美 | 91嫩草国产线观看亚洲一区二区 | 高清日韩欧美 | 亚洲精品视频在线观看免费 | 精品一区久久久 | 欧美成人va | 国产精品人人爽人人爽av | 婷婷综合av | 神马久久久久久 | 国产69久久| 亚洲自国产拍揄拍 | 国产女主播在线喷水呻吟 | 国产精品久久久免费 | 成人性生交免费大片 | 久久99精品久久久久子伦 | 成人性生交视频免费看 | 国产欧美一区二区精品性色超碰 | 免费中文av | 欧美在线综合 | 少妇性i交大片免费 | 欧美狂猛xxxxx乱大交3 | 欧美一区二区三 | 久久狠狠一本精品综合网 | 黄色一级在线视频 | 变态 另类 国产 亚洲 | 97在线观看视频 | 亚洲黄色片网站 | 亚洲三级在线观看 | 国产精品无圣光 | 亚洲 制服 丝袜 无码 | 欧美大肥婆大肥bbbbb | 日韩一级免费看 | 精品国产一区二区三区2021 | 精品人体无码一区二区三区 | 久久精品中文字幕免费 | 国产日本欧美在线观看 | 性欧美色图 | 国内精品九九久久久精品 | 国产免费资源 | 91精品综合久久久久久五月天 | 穿越异世荒淫h啪肉np文 | 人人av在线 | 99久免费精品视频在线观78 | 中文字幕永久免费视频 | 三级黄视频 | 中国浓毛少妇毛茸茸 | 丰满少妇作爱视频免费观看 | 一本大道av伊人久久综合 | 国产成人精品综合久久久久 | 黄色网免费看 | 亚洲精品国产精品国自产在线 | 国产精品大尺度 | 国产一级免费在线 | 青青免费视频 | 国产靠逼视频 | 先锋影音男人 | 国产色综合久久无码有码 | 天堂√在线中文官网在线 | 精品国产乱码久久久久久口爆网站 | 色呦呦中文字幕 | 日本久久久久久久做爰片日本 | 日本老妇高潮乱hd | 中文av在线播放 | 欧美黄色免费网站 | 婷婷精品国产一区二区三区日韩 | 中文字幕永久在线视频 | 欧美jizzhd精品欧美喷水 | 国产成人一区二区三区在线播放 | 日韩精品第二页 | 精品一区在线视频 | 中文字幕永久 | 嫩草视频在线播放 | 伊人久久狼人 | 亚洲国产视频在线观看 | 天天综合日韩 | 不用播放器的av网站 | av在线不卡免费观看 | 亚洲综合无码精品一区二区三区 | 污污网站在线观看 | 无码熟妇αⅴ人妻又粗又大 | 色五月色开心色婷婷色丁香 | 午夜小视频在线观看 | 六月婷婷七月丁香 | 国产一区日本 | 老司机午夜精品视频资源 | 午夜成人亚洲理论片在线观看 | 聚色视频 | 亚洲综合91 | 久久麻豆精品 | 一区二区三区四区产品乱 | 国产免费又黄又爽又刺激蜜月al | 国产午夜一区 | 国产精品永久 | 美女内射毛片在线看3d | 精品乱子伦 | av小四郎最新地址入口 | 色翁荡息又大又硬又粗又爽 | 成人香蕉网 | 欧美巨大双龙性猛交乱大 | 老司机在线ae85 | 在线不卡国产 | 中国极品少妇xxxxⅹ喷水 | 亚洲狼人精品一区二区三区 | 亚洲国产成人精品无码一区二区 | 亚洲永久精品在线观看 | 国产精品久久久久久久久久妇女 | 素人fc2av清纯18岁 | 国产色视频播放网站www | 香蕉久久夜色精品国产使用方法 | 国产激情视频网站 | 97夜夜澡人人双人人人喊 | 天天插天天干 | 色噜噜在线| 亚洲国产欧美日韩在线 | 亚洲中文字幕无码av | 亚洲精品成 | av日韩精品 | 91久久国产视频 | 69伊人| 在线观看国产黄 | 亚洲一区二区三区四区在线 | 国产一区二区精彩视频 | 亚洲第8页 | 依依av| 国产亚洲日韩一区二区三区 | 无套内谢少妇在线观看视频 | 奇米影视一区二区三区 | 无码国产69精品久久久久网站 | 国产一区二区三区不卡av | 国产激情网站 | 天天躁日日躁狠狠很躁 | 色88久久久久高潮综合影院 | 伊人网在线视频观看 | 麻豆理论片 | 米奇av| 丁香八月婷婷 | 国产视频高清 | 久久av无码精品人妻系列 | 无码av专区丝袜专区 | 天堂在线精品视频 | www.91在线播放| 成人一在线视频日韩国产 | 成人做爰69片免费看网站野花 | 日韩欧洲亚洲 | 射综合网| 全部孕妇毛片 | 少妇熟女视频一区二区三区 | 亚洲第一精品在线观看 | 欧美一级免费片 | 偷国产乱人伦偷精品视频 | 中日韩免费视频 | 91免费看 | 中文字幕在线日亚洲9 | 亚洲香蕉在线视频 | 精品黑人一区二区三区 | 成人四色| 亚洲欧美国产双大乳头 | 国产无套精品一区二区 | 亚洲精品一区二区三区新线路 | 国产精品白浆一区二小说 | 国产福利免费在线观看 | 九九九九精品视频在线观看 | 日韩中文在线视频 | 久草在线国产视频 | 国产九九热视频 | 日韩做爰视频免费 | 成人无码精品1区2区3区免费看 | 中文字幕在线观看视频免费 | 久操伊人网 | 日本极品级片 | 69sex久久精品国产麻豆 | 亚洲国产成人精品青青草原导航 | 男人天堂手机在线 | 古典武侠av | 印度女人狂野牲交 | 成年人看的毛片 | 交专区videossex非洲 | 人妻在客厅被c的呻吟 | 经典av在线 | 蜜臀av在线观看 | 人妻熟女一二三区夜夜爱 | 日韩人妻少妇一区二区三区 | 欧美极品少妇xxxxⅹ免费视频 | 永久在线观看 | 国产美女黄网站 | 精品久久无码中文字幕 | 亚洲国产日韩a在线播放 | 日韩精品久久久肉伦网站 | 99久久精品日本一区二区免费 | 美女屁股眼视频网站 | 神马久久久久久久久 | 国产原创91 | 欧美碰碰碰 | 国产一区二区三区四区五区vm | 亚洲中文字幕无码中文字在线 | 奇米影视第四色7777 | 国产精品久久久久久婷婷不卡 | 蜜桃tv一区二区三区 | 亚州成人| 一本色道综合久久欧美日韩精品 | 在线观看成年人视频 | 18女下面流水不遮图 | 美女黄网站18禁免费看 | 爆乳一区二区三区无码 | 日韩在线精品成人av在线 | 日韩av片在线看 | 激情三级在线 | 免费无码毛片一区二区app | 国产肉体ⅹxxx137大胆 | 亚洲日本va午夜蜜芽在线电影 | 久久精品夜夜夜夜夜久久 | 亚洲一区精品无码 | 青草青草久热国产精品 | 醉酒后少妇被疯狂内射视频 | 成人无码www在线看免费 | 老女人乱淫 | 欧美成人看片一区二区三区尤物 | 毛片免费全部无码播放 | 曰韩人妻无码一区二区三区综合部 | 黄网在线免费观看 | 免费中文字幕 | 8888四色奇米在线观看 | 国产精品久久久久久久久 | 日韩视频在线一区 | 欧美肥婆姓交大片 | 亚洲第一se情网站 | 国产欧美一级二级三级在线视频 | 国产又粗又猛又大爽老大爷 | 日本欧美国产一区二区三区 | 天天射天天搞 | 情人伊人久久综合亚洲 | 国产乱妇乱子视频在播放 | 日韩男人天堂 | 吃奶摸下激烈视频学生软件 | 日本少妇一级 | 人人妻人人插视频 | 在线国产中文字幕 | 亚洲精品乱码久久久久久不卡 | 99国产精品久久久久99打野战 | av一二三四 | 欧美激情一级 | les欧美xxxxvideo | 四虎精品免费永久免费视频 | 国产精品久久久久影院 | 亚洲最大在线视频 | 香蕉网伊 | 欧美日韩亚洲系列 | 天堂在线精品 | 伊人免费视频二 | 日韩亚洲欧美中文在线 | 蜜桃精品一区二区 | 天天射狠狠干 | 国产黄色精品网站 | 黄网在线免费看 | 中国少妇内射xxxhd | 日韩在线aⅴ免费视频 | 美女视频毛片 | 伊人资源| 国产在线拍| 亚洲色偷偷男人的天堂 | 秋霞影院午夜伦a片欧美 | 二个男人躁我疯狂吃奶视频 | 久久久久国产精品 | 国产免费艾彩sm调教视频 | 不卡国产一区二区三区四区 | 2024国产精品视频 | 国产男女无遮挡猛进猛出 | 国产精品一级在线 | 校园春色中文字幕 | 青青草视频免费观看 | 男人都懂的网址 | 东京久久久 | 色爱激情网 | 在线观看免费福利 | 天天天天噜在线视频 | 女人裸体夜夜爽快 | 色橹橹欧美在线观看视频高清 | jzzijzzij日本成熟少妇 | 久久亚洲精品无码av | 久久国产柳州莫菁门 | 99久久99九九99九九九 | 友田真希中文字幕在线视频中 |