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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Android仿微信语音聊天demo

發布時間:2023/12/3 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 Android仿微信语音聊天demo 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?其實我接觸android時間也不是很久,但是發現android遠遠比我們想象的要有趣并且復雜很多,所以還是要多花點時間來寫一寫這些demo例子,這個程序是我從慕課網上學來的,因為畢竟要自己手寫,才能體會到程序的完整性,所以我還是建議大家自己手寫代碼,大部分代碼我已經添加了注釋,如果有疑問,大家一起來討論討論。


效果圖



主布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.weixin_record.MainActivity" ><ListViewandroid:id="@+id/listview"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:background="#ebebeb"android:divider="@null"android:dividerHeight="10dp" ></ListView><FrameLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><!-- minHeight消除主界面上的一些間距 --><com.nickming.view.AudioRecordButtonandroid:id="@+id/recordButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="7dp"android:layout_marginLeft="50dp"android:layout_marginRight="50dp"android:layout_marginTop="6dp"android:background="@drawable/button_recordnormal"android:gravity="center"android:minHeight="0dp"android:padding="5dp"android:text="@string/normal"android:textColor="#727272" ></com.nickming.view.AudioRecordButton><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#ccc" /></FrameLayout></LinearLayout>

listview的item布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="60dp"android:layout_marginTop="5dp" ><ImageViewandroid:id="@+id/item_icon"android:layout_width="40dp"android:layout_height="40dp"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="5dp"android:src="@drawable/icon" /><FrameLayoutandroid:id="@+id/recorder_length"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_toLeftOf="@id/item_icon"android:background="@drawable/chatto_bg_focused" ><View android:id="@+id/id_recorder_anim"android:layout_width="25dp"android:layout_height="25dp"android:layout_gravity="center_vertical|right"android:background="@drawable/adj"/></FrameLayout><TextView android:id="@+id/recorder_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginRight="3dp"android:layout_toLeftOf="@id/recorder_length"android:text=""android:textColor="#ff777777"/></RelativeLayout>

dialog的布局樣式文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/dialog_loading_bg"android:gravity="center"android:orientation="vertical"android:padding="20dp"tools:context="com.example.weixin_record.MainActivity" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal" ><ImageViewandroid:id="@+id/dialog_icon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/recorder"android:visibility="visible" /><ImageViewandroid:id="@+id/dialog_voice"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/v1"android:visibility="visible" /></LinearLayout><TextViewandroid:id="@+id/recorder_dialogtext"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="@string/shouzhishanghua"android:textColor="#ffffffff" /></LinearLayout>

新建文件夾drawable,并創立這些自定義資源文件

button加載時樣式的文件

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><solid android:color="#eeeeee" /> <!-- 背景色solid --><strokeandroid:width="1px"android:color="#9b9b9b" /> <!-- 邊框設置 --><corners android:radius="3dp" /> <!-- 轉角 --></shape>

button正常樣式文件

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><solid android:color="#ffffff" /> <!-- 背景色solid --><strokeandroid:width="1px"android:color="#9b9b9b" /> <!-- 邊框設置 --><corners android:radius="3dp" /> <!-- 轉角 --></shape>

播放時的幀動畫文件

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:drawable="@drawable/v_anim1"android:duration="300"></item><itemandroid:drawable="@drawable/v_anim2"android:duration="300"></item><itemandroid:drawable="@drawable/v_anim3"android:duration="300"></item></animation-list>

string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">weixin_Record</string><string name="hello_world">Hello world!</string><string name="action_settings">Settings</string><string  name="normal">按住 說話</string><string  name="recording">松開 結束</string><string  name="want_to_cancle">松開手指,取消發送</string><string name="shouzhishanghua">手指上滑,取消發送</string><string name="tooshort">錄音時間過短</string></resources>


style.xml,這個主要改變了對話框的樣式

<resources xmlns:android="http://schemas.android.com/apk/res/android"><!--Base application theme, dependent on API level. This theme is replacedby AppBaseTheme from res/values-vXX/styles.xml on newer devices.--><style name="AppBaseTheme" parent="android:Theme.Light"><!--Theme customizations available in newer API levels can go inres/values-vXX/styles.xml, while customizations related tobackward-compatibility can go here.--></style><!-- Application theme. --><style name="AppTheme" parent="AppBaseTheme"><!-- All customizations that are NOT specific to a particular API-level can go here. --></style><!-- 設置彈出窗口的屬性,frame疊加,isfloat是否浮動,tarnslucent是否半透明,dim是背景是否變暗 --><style name="Theme_audioDialog" parent="@android:style/Theme.Dialog"><item name="android:windowBackground">@android:color/transparent</item><item name="android:windowFrame">@null</item><item name="android:windowIsFloating">true</item><item name="android:windowIsTranslucent">true</item><item name="android:backgroundDimEnabled">false</item></style></resources>



對了,要記得在mainfest中添加幾個權限

<uses-permission android:name="android.permission.RECORD_AUDIO" />
? ? <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
? ? <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />



現在來寫主要的幾個類

AudioRecordButton.class

package com.nickming.view;import com.example.weixin_record.R;
import com.example.weixin_record.R.string;
import com.nickming.view.AudioManager.AudioStageListener;import android.R.bool;
import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;public class AudioRecordButton extends Button implements AudioStageListener {private static final int STATE_NORMAL = 1;private static final int STATE_RECORDING = 2;private static final int STATE_WANT_TO_CANCEL = 3;private static final int DISTANCE_Y_CANCEL = 50;private int mCurrentState = STATE_NORMAL;// 已經開始錄音private boolean isRecording = false;private DialogManager mDialogManager;private AudioManager mAudioManager;private float mTime = 0;// 是否觸發了onlongclick,準備好了private boolean mReady;/*** 先實現兩個參數的構造方法,布局會默認引用這個構造方法, 用一個 構造參數的構造方法來引用這個方法 * @param context*/public AudioRecordButton(Context context) {this(context, null);// TODO Auto-generated constructor stub}public AudioRecordButton(Context context, AttributeSet attrs) {super(context, attrs);mDialogManager = new DialogManager(getContext());// 這里沒有判斷儲存卡是否存在,有空要判斷String dir = Environment.getExternalStorageDirectory()+ "/nickming_recorder_audios";mAudioManager = AudioManager.getInstance(dir);mAudioManager.setOnAudioStageListener(this);setOnLongClickListener(new OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {// TODO Auto-generated methodmReady = true;mAudioManager.prepareAudio();return false;}});// TODO Auto-generated constructor stub}/*** 錄音完成后的回調,回調給activiy,可以獲得mtime和文件的路徑* @author nickming**/public interface AudioFinishRecorderListener{void onFinished(float seconds,String filePath);}private AudioFinishRecorderListener mListener;public void setAudioFinishRecorderListener(AudioFinishRecorderListener listener){mListener=listener;}// 獲取音量大小的runnableprivate Runnable mGetVoiceLevelRunnable = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile (isRecording) {try {Thread.sleep(100);mTime += 0.1f;mhandler.sendEmptyMessage(MSG_VOICE_CHANGE);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};// 準備三個常量private static final int MSG_AUDIO_PREPARED = 0X110;private static final int MSG_VOICE_CHANGE = 0X111;private static final int MSG_DIALOG_DIMISS = 0X112;private Handler mhandler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) {case MSG_AUDIO_PREPARED:// 顯示應該是在audio end prepare之后回調mDialogManager.showRecordingDialog();isRecording = true;new Thread(mGetVoiceLevelRunnable).start();// 需要開啟一個線程來變換音量break;case MSG_VOICE_CHANGE:mDialogManager.updateVoiceLevel(mAudioManager.getVoiceLevel(7));break;case MSG_DIALOG_DIMISS:break;}};};// 在這里面發送一個handler的消息@Overridepublic void wellPrepared() {// TODO Auto-generated method stubmhandler.sendEmptyMessage(MSG_AUDIO_PREPARED);}/*** 直接復寫這個監聽函數*/@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubint action = event.getAction();int x = (int) event.getX();int y = (int) event.getY();switch (action) {case MotionEvent.ACTION_DOWN:changeState(STATE_RECORDING);break;case MotionEvent.ACTION_MOVE:if (isRecording) {// 根據x,y來判斷用戶是否想要取消if (wantToCancel(x, y)) {changeState(STATE_WANT_TO_CANCEL);} else {changeState(STATE_RECORDING);}}break;case MotionEvent.ACTION_UP:// 首先判斷是否有觸發onlongclick事件,沒有的話直接返回resetif (!mReady) {reset();return super.onTouchEvent(event);}// 如果按的時間太短,還沒準備好或者時間錄制太短,就離開了,則顯示這個dialogif (!isRecording || mTime < 0.6f) {mDialogManager.tooShort();mAudioManager.cancel();mhandler.sendEmptyMessageDelayed(MSG_DIALOG_DIMISS, 1300);// 持續1.3s} else if (mCurrentState == STATE_RECORDING) {//正常錄制結束mDialogManager.dimissDialog();mAudioManager.release();// release釋放一個mediarecorderif (mListener!=null) {// 并且callbackActivity,保存錄音mListener.onFinished(mTime, mAudioManager.getCurrentFilePath());}} else if (mCurrentState == STATE_WANT_TO_CANCEL) {// cancelmAudioManager.cancel();mDialogManager.dimissDialog();}reset();// 恢復標志位break;}return super.onTouchEvent(event);}/*** 回復標志位以及狀態*/private void reset() {// TODO Auto-generated method stubisRecording = false;changeState(STATE_NORMAL);mReady = false;mTime = 0;}private boolean wantToCancel(int x, int y) {// TODO Auto-generated method stubif (x < 0 || x > getWidth()) {// 判斷是否在左邊,右邊,上邊,下邊return true;}if (y < -DISTANCE_Y_CANCEL || y > getHeight() + DISTANCE_Y_CANCEL) {return true;}return false;}private void changeState(int state) {// TODO Auto-generated method stubif (mCurrentState != state) {mCurrentState = state;switch (mCurrentState) {case STATE_NORMAL:setBackgroundResource(R.drawable.button_recordnormal);setText(R.string.normal);break;case STATE_RECORDING:setBackgroundResource(R.drawable.button_recording);setText(R.string.recording);if (isRecording) {mDialogManager.recording();// 復寫dialog.recording();}break;case STATE_WANT_TO_CANCEL:setBackgroundResource(R.drawable.button_recording);setText(R.string.want_to_cancle);// dialog want to cancelmDialogManager.wantToCancel();break;}}}@Overridepublic boolean onPreDraw() {// TODO Auto-generated method stubreturn false;}}

對話框的manager

DialogManager.class

package com.nickming.view;import com.example.weixin_record.R;import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;public class DialogManager {/*** 以下為dialog的初始化控件,包括其中的布局文件*/private Dialog mDialog;private ImageView mIcon;private ImageView mVoice;private TextView mLable;private Context mContext;public DialogManager(Context context) {// TODO Auto-generated constructor stubmContext = context;}public void showRecordingDialog() {// TODO Auto-generated method stubmDialog = new Dialog(mContext,R.style.Theme_audioDialog);// 用layoutinflater來引用布局LayoutInflater inflater = LayoutInflater.from(mContext);View view = inflater.inflate(R.layout.dialog_manager, null);mDialog.setContentView(view);mIcon = (ImageView) mDialog.findViewById(R.id.dialog_icon);mVoice = (ImageView) mDialog.findViewById(R.id.dialog_voice);mLable = (TextView) mDialog.findViewById(R.id.recorder_dialogtext);mDialog.show();}/*** 設置正在錄音時的dialog界面*/public void recording() {if (mDialog != null && mDialog.isShowing()) {mIcon.setVisibility(View.VISIBLE);mVoice.setVisibility(View.VISIBLE);mLable.setVisibility(View.VISIBLE);mIcon.setImageResource(R.drawable.recorder);mLable.setText(R.string.shouzhishanghua);}}/*** 取消界面*/public void wantToCancel() {// TODO Auto-generated method stubif (mDialog != null && mDialog.isShowing()) {mIcon.setVisibility(View.VISIBLE);mVoice.setVisibility(View.GONE);mLable.setVisibility(View.VISIBLE);mIcon.setImageResource(R.drawable.cancel);mLable.setText(R.string.want_to_cancle);}}// 時間過短public void tooShort() {// TODO Auto-generated method stubif (mDialog != null && mDialog.isShowing()) {mIcon.setVisibility(View.VISIBLE);mVoice.setVisibility(View.GONE);mLable.setVisibility(View.VISIBLE);mIcon.setImageResource(R.drawable.voice_to_short);mLable.setText(R.string.tooshort);}}// 隱藏dialogpublic void dimissDialog() {// TODO Auto-generated method stubif (mDialog != null && mDialog.isShowing()) {mDialog.dismiss();mDialog = null;}}public void updateVoiceLevel(int level) {// TODO Auto-generated method stubif (mDialog != null && mDialog.isShowing()) {//先不改變它的默認狀態
//			mIcon.setVisibility(View.VISIBLE);
//			mVoice.setVisibility(View.VISIBLE);
//			mLable.setVisibility(View.VISIBLE);//通過level來找到圖片的id,也可以用switch來尋址,但是代碼可能會比較長int resId = mContext.getResources().getIdentifier("v" + level,"drawable", mContext.getPackageName());mVoice.setImageResource(resId);}}}

audioManager.class

package com.nickming.view;import java.io.File;
import java.io.IOException;
import java.util.UUID;import com.example.weixin_record.R.string;import android.media.MediaRecorder;public class AudioManager {private MediaRecorder mRecorder;private String mDirString;private String mCurrentFilePathString;private boolean isPrepared;// 是否準備好了/*** 單例化的方法 1 先聲明一個static 類型的變量a 2 在聲明默認的構造函數 3 再用public synchronized static* 類名 getInstance() { if(a==null) { a=new 類();} return a; } 或者用以下的方法*//*** 單例化這個類*/private static AudioManager mInstance;private AudioManager(String dir) {mDirString=dir;}public static AudioManager getInstance(String dir) {if (mInstance == null) {synchronized (AudioManager.class) {if (mInstance == null) {mInstance = new AudioManager(dir);}}}return mInstance;}/*** 回調函數,準備完畢,準備好后,button才會開始顯示錄音框* * @author nickming**/public interface AudioStageListener {void wellPrepared();}public AudioStageListener mListener;public void setOnAudioStageListener(AudioStageListener listener) {mListener = listener;}// 準備方法public void prepareAudio() {try {// 一開始應該是false的isPrepared = false;File dir = new File(mDirString);if (!dir.exists()) {dir.mkdirs();}String fileNameString = generalFileName();File file = new File(dir, fileNameString);mCurrentFilePathString = file.getAbsolutePath();mRecorder = new MediaRecorder();// 設置輸出文件mRecorder.setOutputFile(file.getAbsolutePath());// 設置meidaRecorder的音頻源是麥克風mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設置文件音頻的輸出格式為amrmRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);// 設置音頻的編碼格式為amrmRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 嚴格遵守google官方api給出的mediaRecorder的狀態流程圖mRecorder.prepare();mRecorder.start();// 準備結束isPrepared = true;// 已經準備好了,可以錄制了if (mListener != null) {mListener.wellPrepared();}} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 隨機生成文件的名稱* * @return*/private String generalFileName() {// TODO Auto-generated method stubreturn UUID.randomUUID().toString() + ".amr";}// 獲得聲音的levelpublic int getVoiceLevel(int maxLevel) {// mRecorder.getMaxAmplitude()這個是音頻的振幅范圍,值域是1-32767if (isPrepared) {try {// 取證+1,否則去不到7return maxLevel * mRecorder.getMaxAmplitude() / 32768 + 1;} catch (Exception e) {// TODO Auto-generated catch block}}return 1;}// 釋放資源public void release() {// 嚴格按照api流程進行mRecorder.stop();mRecorder.release();mRecorder = null;}// 取消,因為prepare時產生了一個文件,所以cancel方法應該要刪除這個文件,// 這是與release的方法的區別public void cancel() {release();if (mCurrentFilePathString != null) {File file = new File(mCurrentFilePathString);file.delete();mCurrentFilePathString = null;}}public String getCurrentFilePath() {// TODO Auto-generated method stubreturn mCurrentFilePathString;}}

MediaManager.class

package com.example.weixin_record;import java.io.IOException;import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;public class MediaManager {private static MediaPlayer mPlayer;private static boolean isPause;public static  void playSound(String filePathString,OnCompletionListener onCompletionListener) {// TODO Auto-generated method stubif (mPlayer==null) {mPlayer=new MediaPlayer();//保險起見,設置報錯監聽mPlayer.setOnErrorListener(new OnErrorListener() {@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {// TODO Auto-generated method stubmPlayer.reset();return false;}});}else {mPlayer.reset();//就回復}try {mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mPlayer.setOnCompletionListener(onCompletionListener);mPlayer.setDataSource(filePathString);mPlayer.prepare();mPlayer.start();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//停止函數public static void pause(){if (mPlayer!=null&&mPlayer.isPlaying()) {mPlayer.pause();isPause=true;}}//繼續public static void resume(){if (mPlayer!=null&&isPause) {mPlayer.start();isPause=false;}}public  static void release(){if (mPlayer!=null) {mPlayer.release();mPlayer=null;}}
}

RecorderAdapter.class

package com.example.weixin_record;import java.util.List;import com.example.weixin_record.MainActivity.Recorder;import android.content.Context;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.TextView;public class RecorderAdapter extends ArrayAdapter<Recorder> {private LayoutInflater inflater;private int mMinItemWith;// 設置對話框的最大寬度和最小寬度private int mMaxItemWith;public RecorderAdapter(Context context, List<Recorder> dataList) {super(context, -1, dataList);// TODO Auto-generated constructor stubinflater = LayoutInflater.from(context);// 獲取系統寬度WindowManager wManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wManager.getDefaultDisplay().getMetrics(outMetrics);mMaxItemWith = (int) (outMetrics.widthPixels * 0.7f);mMinItemWith = (int) (outMetrics.widthPixels * 0.15f);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder = null;if (convertView == null) {convertView = inflater.inflate(R.layout.item_layout, parent, false);viewHolder=new ViewHolder();viewHolder.seconds=(TextView) convertView.findViewById(R.id.recorder_time);viewHolder.length=convertView.findViewById(R.id.recorder_length);convertView.setTag(viewHolder);}else {viewHolder=(ViewHolder) convertView.getTag();}viewHolder.seconds.setText(Math.round(getItem(position).time)+"\"");ViewGroup.LayoutParams lParams=viewHolder.length.getLayoutParams();lParams.width=(int) (mMinItemWith+mMaxItemWith/60f*getItem(position).time);viewHolder.length.setLayoutParams(lParams);return convertView;}class ViewHolder {TextView seconds;// 時間View length;// 對話框長度}}

MainActivity.class

package com.example.weixin_record;import java.util.ArrayList;
import java.util.List;import com.nickming.view.AudioRecordButton;
import com.nickming.view.AudioRecordButton.AudioFinishRecorderListener;import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;public class MainActivity extends Activity {AudioRecordButton button;private ListView mlistview;private ArrayAdapter<Recorder> mAdapter;private View viewanim;private List<Recorder> mDatas = new ArrayList<MainActivity.Recorder>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mlistview = (ListView) findViewById(R.id.listview);button = (AudioRecordButton) findViewById(R.id.recordButton);button.setAudioFinishRecorderListener(new AudioFinishRecorderListener() {@Overridepublic void onFinished(float seconds, String filePath) {// TODO Auto-generated method stubRecorder recorder = new Recorder(seconds, filePath);mDatas.add(recorder);mAdapter.notifyDataSetChanged();mlistview.setSelection(mDatas.size() - 1);}});mAdapter = new RecorderAdapter(this, mDatas);mlistview.setAdapter(mAdapter);mlistview.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// TODO Auto-generated method stub// 播放動畫if (viewanim!=null) {//讓第二個播放的時候第一個停止播放viewanim.setBackgroundResource(R.id.id_recorder_anim);viewanim=null;}viewanim = view.findViewById(R.id.id_recorder_anim);viewanim.setBackgroundResource(R.drawable.play);AnimationDrawable drawable = (AnimationDrawable) viewanim.getBackground();drawable.start();// 播放音頻MediaManager.playSound(mDatas.get(position).filePathString,new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {viewanim.setBackgroundResource(R.id.id_recorder_anim);}});}});}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();MediaManager.pause();}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();MediaManager.resume();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();MediaManager.release();}class Recorder {float time;String filePathString;public Recorder(float time, String filePathString) {super();this.time = time;this.filePathString = filePathString;}public float getTime() {return time;}public void setTime(float time) {this.time = time;}public String getFilePathString() {return filePathString;}public void setFilePathString(String filePathString) {this.filePathString = filePathString;}}}

主要就是這幾個類了,另外工程我已經上傳到了csdn上了,有需要的朋友可以下載,看我上傳的資源即可找到。


總結

以上是生活随笔為你收集整理的Android仿微信语音聊天demo的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久免费国产精品1 | 欧美日韩精品免费观看视频 | 18国产精品白浆在线观看免费 | 日韩欧美不卡 | www.com在线观看 | 最新色站 | 免费久久久 | 91av短视频| 亚洲免费国产视频 | 免费一级特黄录像 | 夜夜躁日日躁 | 91精品在线免费视频 | 久草在线视频网 | 国产在线欧美在线 | 成人国产精品免费观看 | 天天射天天射天天射 | 久久精品国产第一区二区三区 | 国产精品成人aaaaa网站 | 中文字幕精品视频 | 免费黄色小网站 | 久久久亚洲麻豆日韩精品一区三区 | 深夜激情影院 | 国产人成精品一区二区三 | 伊人手机在线 | 中文一区在线观看 | 久久成年人网站 | 激情五月婷婷网 | 国产一线天在线观看 | 亚洲精品在线观看不卡 | 摸bbb搡bbb搡bbbb | 国产亚洲精品bv在线观看 | 日韩国产精品一区 | 亚洲国产成人在线观看 | www.成人sex| 久久官网 | www.91国产| 东方av在| 久久精品美女视频网站 | 一区二精品 | 亚洲精品视频在线观看视频 | 国产成人黄色网址 | 欧美男男tv网站 | 免费三级网 | 亚洲精品视频免费在线 | 免费一级特黄毛大片 | 日本99干网| 亚洲成年人在线播放 | 国产一级淫片在线观看 | 天堂麻豆 | 色网站在线观看 | 成人a级黄色片 | 十八岁以下禁止观看的1000个网站 | 在线v片免费观看视频 | 97超碰免费 | 色婷婷亚洲精品 | 最近最新mv字幕免费观看 | 日韩av电影中文字幕在线观看 | 国产小视频在线观看免费 | 久久久久久看片 | 亚洲中字幕| 成人黄色在线 | 精品国产欧美一区二区三区不卡 | 在线免费观看黄 | 成人精品一区二区三区电影免费 | 日本在线观看中文字幕无线观看 | 免费黄色av. | 免费网站污 | 久久久精品国产免费观看一区二区 | 精品一区二区在线免费观看 | 国产最顶级的黄色片在线免费观看 | 成人国产综合 | 国产91全国探花系列在线播放 | 欧美一区二区在线刺激视频 | 亚洲片在线资源 | 国产精品免费久久久久影院仙踪林 | 亚洲精品中文在线 | 国产女人40精品一区毛片视频 | 91精品国产乱码久久 | 国产va饥渴难耐女保洁员在线观看 | 人人艹视频 | 亚洲一一在线 | 国产精品美女免费视频 | 色91av | 国产又粗又硬又爽的视频 | 国产高清视频在线 | 国产一区二区视频在线播放 | 97色在线观看 | 99热国产在线| 亚洲人成免费网站 | 国产一区二区三区高清播放 | 国产精品高清免费在线观看 | 国产精品视频地址 | 狠狠操狠狠插 | 97成人精品 | 久久久久久久久久亚洲精品 | 日本精品视频在线观看 | 国产精品av久久久久久无 | 欧美老少交 | 一区二区日韩av | 精品久久久久久国产偷窥 | 久久综合影院 | 国产精彩在线视频 | 91av在线视频播放 | 亚洲国产日本 | 国产精品av一区二区 | 最新影院 | 国产精品免费久久久久久久久久中文 | 日韩精品中文字幕在线观看 | 日韩美视频 | 在线中文字幕电影 | 成人亚洲欧美 | 国产淫片免费看 | 美女网色 | 国产一区二区不卡在线 | 久久久麻豆 | 国产在线观看av | 免费观看黄色12片一级视频 | 日韩av资源在线观看 | 国产精品欧美久久久久无广告 | 成人免费视频网 | 欧美亚洲成人免费 | 欧美美女视频在线观看 | 人人爽人人爽人人爽人人爽 | 国产婷婷色 | 天天操综合网 | 成人手机在线视频 | 亚洲精品在线观看网站 | 成人h动漫精品一区二 | 99爱国产精品 | 一本一本久久a久久精品综合小说 | 97精品国产91久久久久久 | 91精品国产自产在线观看永久 | 韩国精品一区二区三区六区色诱 | 久99精品 | 久久精品99国产精品 | 国产一线二线三线在线观看 | 麻豆传媒电影在线观看 | 色播五月激情五月 | 日韩69视频 | 天天天天天天天天操 | 九九热只有精品 | 亚洲日韩欧美视频 | 国产免费久久av | 在线观看亚洲 | 久福利| 91麻豆高清视频 | 黄色成人av | 在线天堂中文在线资源网 | 日韩视频专区 | 国产日韩欧美自拍 | 人人草天天草 | 韩国精品福利一区二区三区 | 免费av在线 | 五月天色婷婷丁香 | 久久艹综合 | 久久久久色 | 97超碰在线久草超碰在线观看 | 久久久国产精品电影 | 波多野结衣在线播放视频 | 99久久999久久久精玫瑰 | 成人观看视频 | 亚洲精品欧美专区 | 91九色porn在线资源 | 国产亚洲精品电影 | 97精品国产91久久久久久久 | 日日夜夜精品网站 | 综合色婷婷 | 91久久国产自产拍夜夜嗨 | 精品久久久久国产 | 亚洲少妇天堂 | 99精品国产aⅴ | 在线亚洲高清视频 | 国产精品国内免费一区二区三区 | 国产亚洲亚洲 | 亚洲精品国产精品国自产在线 | 香蕉国产91 | 激情五月婷婷激情 | 高清久久久久久 | 色综合在 | 国产亚洲精品久久久久久久久久 | 99久久日韩精品视频免费在线观看 | 精品视频免费观看 | 天天干,天天射,天天操,天天摸 | 日韩免费精品 | 亚洲自拍偷拍色图 | 免费观看av网站 | 久久免费看毛片 | 亚州av一区 | 欧美成人xxxxx | 97视频人人免费看 | 国产一区视频免费在线观看 | 99久久成人 | 国产在线精品福利 | 99精品国产99久久久久久97 | 91视频网址入口 | 亚洲精品国产成人 | 一区二区三区av在线 | av在线网站大全 | 欧美日韩中 | 美女啪啪图片 | 国产精品手机在线观看 | 91免费在线播放 | 国产一区二区三区在线免费观看 | 麻豆一精品传二传媒短视频 | 色妞久久福利网 | 99亚洲国产 | 97涩涩视频 | www.com久久久 | 久久久999免费视频 日韩网站在线 | a在线观看免费视频 | 91网址在线看 | 亚洲精品乱码白浆高清久久久久久 | 成人免费在线看片 | 三级免费黄色 | 欧美做受69 | www.久久久.com | 国产福利网站 | 久久经典国产视频 | 久久精品久久99精品久久 | 国产第一福利 | 蜜臀av网站| 久久免费在线视频 | 免费在线观看成人小视频 | 国产精品综合av一区二区国产馆 | 91av视频在线播放 | 亚洲一二三区精品 | 操操操日日 | 久久久国产一区二区 | 久久久久久久久久久成人 | 日本精品午夜 | 日韩av午夜 | 99久久精品午夜一区二区小说 | 伊人黄 | 在线免费观看视频a | 伊人久久国产精品 | 国产欧美精品一区二区三区四区 | 日韩在线中文字幕 | 96超碰在线 | av亚洲产国偷v产偷v自拍小说 | 青青草国产在线 | 欧美日韩在线免费视频 | 91精品久久久久久综合乱菊 | 国产精品美女免费 | 国产精品永久久久久久久久久 | 成人av免费播放 | 日韩欧美综合视频 | 久操操| 男女激情麻豆 | 国产成人精品999 | 国产精品二区在线观看 | 中文字幕 国产视频 | 国产精品专区在线观看 | 黄色91在线观看 | 免费在线一区二区 | 91漂亮少妇露脸在线播放 | 国产99自拍 | 一本一道久久a久久精品 | 91av在| 久久免费国产视频 | 欧美一级乱黄 | 国产精品一区二区三区电影 | 日本一区二区三区免费看 | 久久精精品| 射久久 | 狠狠色综合网站久久久久久久 | 婷婷丁香在线视频 | 在线免费观看麻豆视频 | 日韩免费一区二区三区 | 中文字幕一区二区在线观看 | 8x成人免费视频 | 91污视频在线 | 欧美伦理一区二区三区 | 日韩精品中文字幕在线不卡尤物 | 久久成人国产精品入口 | 免费观看的av网站 | 国产免费作爱视频 | www久久久久 | 欧美一级片免费播放 | 蜜臀久久99精品久久久久久网站 | 久久久久久网址 | 国产亚洲精品福利 | 黄色不卡av | 最新国产精品久久精品 | 2023国产精品自产拍在线观看 | 色吊丝在线永久观看最新版本 | 麻花传媒mv免费观看 | 国产在线观看不卡 | 国产 字幕 制服 中文 在线 | 久草视频观看 | 国产精品久久久久久99 | 色综合久久精品 | 国际av在线 | 国产精品九九久久久久久久 | 亚洲精选久久 | 午夜精品成人一区二区三区 | 国产精品2018 | 天天操夜夜叫 | 玖玖国产精品视频 | 久久久久久久久久久精 | 超碰国产在线 | 日韩在线视频一区 | 一区二区三区四区影院 | 国产一区二区免费 | 欧美午夜激情网 | 久久91网| 久久婷婷精品 | 美女国内精品自产拍在线播放 | 亚洲国产69| 五月天六月婷 | 亚洲精品在线免费看 | 三级黄色免费片 | 午夜精品一区二区三区免费 | av在线激情| 在线观看91av | 国产日韩欧美视频在线观看 | 91久久久国产精品 | 黄色视屏免费在线观看 | 日韩久久久 | 久久久免费精品 | 久久 在线 | 天天操欧美 | av动图 | 男女精品久久 | 国产精品免费av | 久久经典视频 | 日韩在线二区 | 久久资源在线 | 中文字幕成人av | 97国产在线 | 黄色中文字幕在线 | 久久精品站 | 久久精品国产精品亚洲 | 久久伊人国产精品 | 夜夜婷婷| 91在线永久 | 欧美a免费| 五月婷激情 | 久久国内精品99久久6app | 777久久久 | 麻花豆传媒mv在线观看 | 免费裸体视频网 | 一区二区三区在线观看免费视频 | 伊甸园永久入口www 99热 精品在线 | 日韩中文字幕视频在线 | 少妇精品久久久一区二区免费 | 免费91在线观看 | 精品一区二区免费视频 | 国产第一页福利影院 | 开心色停停| 精品国产一区二区三区四区在线观看 | av免费看在线| 久久看免费视频 | 久久天堂影院 | 日韩精品一区二区免费 | www.色综合.com | 亚洲激情免费 | 久久热首页 | 精品美女久久久久久免费 | 99色在线| 99热只有精品在线观看 | 久久精品人| 黄免费在线观看 | 成人国产综合 | 国产成人精品一区在线 | 中文字幕av在线电影 | 久久综合九色综合久99 | 99免费在线视频观看 | 亚洲人成人在线 | 久热免费在线 | 国产亚洲人 | 91精品国产99久久久久 | 国产在线精品播放 | 亚洲一区动漫 | 国产 日韩 在线 亚洲 字幕 中文 | 日韩毛片一区 | bbb搡bbb爽爽爽 | 黄免费网站 | 欧美视频不卡 | 国产永久免费高清在线观看视频 | 国产精品99久久久精品免费观看 | 夜夜爽88888免费视频4848 | www日韩在线观看 | 欧洲精品久久久久毛片完整版 | 亚洲激情婷婷 | 最新99热| 精品久久久免费视频 | 中文区中文字幕免费看 | 最新成人av| 免费黄色激情视频 | 国产黄色av影视 | 91在线中文 | 日韩一区二区免费在线观看 | 在线免费观看国产视频 | 国产黄色片在线 | 三级a视频 | 91手机电影 | 美女网站在线免费观看 | 日本中文字幕视频 | 2023国产精品自产拍在线观看 | 国产成人精品一区二区 | 免费看毛片网站 | 黄色大片日本 | 国产精品一区二区三区在线免费观看 | 国内丰满少妇猛烈精品播 | 日韩欧美一区二区三区黑寡妇 | 中文字幕永久在线 | 国产va饥渴难耐女保洁员在线观看 | 午夜av网站 | 久久精精品 | 免费久久99精品国产婷婷六月 | 国产91丝袜在线播放动漫 | 日韩成人欧美 | 美女视频久久 | 久久免费国产视频 | 亚洲伊人成综合网 | 久久精品人人做人人综合老师 | 激情中文在线 | 2024国产精品视频 | 国产资源在线免费观看 | 亚洲精品在线电影 | 黄色毛片一级片 | 日韩福利在线观看 | 午夜视频不卡 | 久久免费看a级毛毛片 | 六月丁香婷婷网 | 最近免费中文字幕 | 久热av在线| 国产专区一 | 亚洲免费视频观看 | 午夜精品成人一区二区三区 | 久久草视频 | 天堂入口网站 | 99re国产视频 | 国产黄色免费观看 | 免费在线观看日韩欧美 | 2018精品视频 | 日本公乱妇视频 | 中文字幕日韩国产 | 日韩高清一二区 | 黄色免费高清视频 | 欧美一区二区在线刺激视频 | 黄网在线免费观看 | 91cn国产在线 | 黄色美女免费网站 | 天天爱天天操天天射 | 91禁在线观看 | 国产精品久久视频 | 国产精品久久久久一区二区国产 | 欧美日韩不卡一区二区三区 | 免费高清看电视网站 | 国产成人免费观看 | 亚洲成人999 | www.av免费观看 | 婷婷在线观看视频 | 国产精品九九视频 | 激情电影影院 | 国产精品不卡一区 | 999色视频 | 欧美精品久久久久a | 国产一二区免费视频 | 午夜久久影视 | 欧美一区二区三区在线视频观看 | 美州a亚洲一视本频v色道 | 日韩中文字幕第一页 | 精品一区二三区 | 96在线| 国产视频在线观看免费 | 亚洲va欧美| 亚洲成av人片在线观看香蕉 | av无限看| av高清不卡| 亚洲不卡123 | 欧美91在线 | 久草91视频 | 国产一级特黄毛片在线毛片 | 亚洲一区二区视频在线 | 黄色中文字幕 | 亚洲精品视频在线观看免费视频 | 首页av在线 | 99久久综合国产精品二区 | 国产精品黄色av | 久久成人国产 | 成 人 黄 色 片 在线播放 | 中文字幕av免费观看 | 久久国产精品免费看 | 久久xx视频 | 日韩在线观看视频网站 | 一级片在线 | 午夜少妇一区二区三区 | 美女国产网站 | 激情久久久久久久久久久久久久久久 | 成人av久久 | 久久精品欧美日韩精品 | 日韩欧美网址 | av在线播放网址 | 黄色一级影院 | 国产一区二区三区四区在线 | 亚洲另类久久 | 国产午夜精品久久久久久久久久 | 天天射网站| 日韩啪啪小视频 | 日韩91精品 | 国产福利不卡视频 | 丁香婷婷色综合亚洲电影 | 成人在线播放视频 | 又爽又黄在线观看 | 成年人在线看片 | 亚洲视频456| av片在线观看 | 五月花丁香婷婷 | 国产手机在线视频 | 成人性生爱a∨ | 免费人人干 | 亚洲国产精品女人久久久 | 成人a视频片观看免费 | 五月婷激情 | 国产精品免费视频一区二区 | 成人黄色大片在线免费观看 | 久久激情五月丁香伊人 | 婷婷久久精品 | 免费看十八岁美女 | 天天综合五月天 | 一区二区伦理电影 | av网站大全免费 | 国产精选视频 | 五月激情久久久 | 人人澡澡人人 | 国产韩国日本高清视频 | 午夜色场 | 成年人黄色在线观看 | 久久精品视频一 | 日韩久久久久 | 欧美色综合天天久久综合精品 | 亚洲最大成人免费网站 | 日韩最新av | 国内精品久久久久久久 | 欧美日韩在线免费观看 | 亚洲欧美在线综合 | a级国产片 | 激情av在线资源 | 国产一区二区在线免费播放 | 国产亚洲精品久久网站 | 国产精品毛片久久久久久 | 亚洲精品在线观看网站 | 黄色aaa毛片 | 久久久精品影视 | 99精品观看| 欧美国产不卡 | 久久人人爽人人爽人人片av软件 | 久久久久亚洲精品国产 | 成 人 黄 色 免费播放 | 久久成人亚洲欧美电影 | 亚洲黄色免费在线 | 国产精品日韩欧美一区二区 | 9999毛片| 国产精品99在线观看 | www.五月婷 | 99久久久精品| 婷婷五月色综合 | 精品国产综合区久久久久久 | 国产色视频网站 | 制服丝袜亚洲 | 99精品在线直播 | 黄网站色成年免费观看 | a爱爱视频 | 91黄色小网站 | 中文字幕在线观看第二页 | 最近中文字幕免费 | 国产美腿白丝袜足在线av | 色99久久 | 精品专区一区二区 | 国产一区二区在线免费 | 另类五月激情 | 日韩中文字幕国产 | 三级黄色免费 | 午夜黄色大片 | 香蕉国产91 | 97人人网 | 玖玖在线免费视频 | 一本一道久久a久久精品 | 亚洲视频在线观看免费 | 国产视频一区在线 | 日韩精品欧美视频 | 亚洲综合在线播放 | 免费视频成人 | 五月综合色婷婷 | 久久久福利视频 | 在线免费av网站 | 99热亚洲精品 | 免费av观看网站 | 久久色在线观看 | 99久热在线精品视频观看 | 成人黄色短片 | 亚洲免费在线观看视频 | 国产精品久久精品 | 亚洲三级在线 | 最近免费中文字幕 | 91传媒在线看 | 欧美一级特黄高清视频 | 丁香久久婷婷 | 日韩精品亚洲专区在线观看 | 中文字幕在线视频精品 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 四虎免费在线观看视频 | 在线看一区| 国产精品免费成人 | 91女神的呻吟细腰翘臀美女 | 国产精品第一页在线观看 | 亚洲有 在线 | 美女网色| 免费网站黄 | 999成人 | 久草精品电影 | 日韩三区在线观看 | 在线观看免费中文字幕 | 中文字幕在线视频一区二区三区 | 亚洲综合色网站 | 麻豆传媒视频在线 | 色综合天天做天天爱 | 日韩视频欧美视频 | 日韩欧美视频二区 | 色婷婷六月天 | 国产在线观看中文字幕 | 欧美精品国产精品 | 亚洲精品高清视频在线观看 | 成人国产在线 | 91在线视频导航 | 五月婷婷黄色网 | 91av视频网| 亚洲成人精品在线 | 91麻豆产精品久久久久久 | 超碰在线中文字幕 | 日韩精品一区二区三区外面 | 在线国产专区 | 欧美91精品国产自产 | 特级西西444www大胆高清无视频 | 丝袜制服天堂 | 午夜精品一区二区三区在线播放 | 在线一区观看 | 香蕉影视app | 在线免费国产 | 9992tv成人免费看片 | 免费在线观看av网站 | 国产精品视频免费在线观看 | a级国产片| 五月婷婷色综合 | 一区二区三区电影在线播 | 日日夜夜综合网 | 麻豆国产精品va在线观看不卡 | 免费在线观看不卡av | 欧美日韩精品二区第二页 | 麻豆精品视频在线观看免费 | 久久久免费毛片 | 色哟哟国产精品 | 深爱开心激情网 | 波多野结衣久久精品 | 天天玩天天干 | 成年人免费av网站 | 国产丝袜| 久久久久高清 | 夜夜嗨av色一区二区不卡 | 欧美在线视频一区二区 | 欧美成人亚洲成人 | 最近中文字幕视频完整版 | 一级一片免费看 | 国产在线精品区 | 国产小视频在线免费观看 | 国产精品自产拍在线观看 | 成年人黄色av | 亚洲国产网址 | av看片网址| 激情欧美xxxx | 最新成人在线 | 精品99久久 | 99免费精品视频 | 成人黄色在线看 | 欧美日韩国产在线观看 | 中文字幕在线国产精品 | 97超级碰碰碰视频在线观看 | 日本精品二区 | 精品国产一区二 | 婷婷丁香色 | 精品一区91| 久草在线免费新视频 | 亚洲视频在线播放 | 99热精品久久 | 精品国产乱码一区二区三区在线 | 在线观看91精品国产网站 | 天天干天天射天天插 | www.午夜色.com| 久久久久久久久久久综合 | 亚洲精品9 | 婷婷色网站 | 成人免费视频网 | 亚洲情感电影大片 | 免费网站观看www在线观看 | 99久久综合国产精品二区 | 丁香六月婷婷激情 | 中文字幕 国产精品 | 91在线蜜桃臀 | 免费亚洲精品 | 2023av| 久久成人综合视频 | 成年人在线看片 | 久久综合九色综合97婷婷女人 | 精品一区二区免费视频 | 久草在线看片 | 亚洲精品视频久久 | 久久免费激情视频 | 狠狠色丁婷婷日日 | 久色 网| 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人免费观看网址 | 亚洲精品天天 | 日本中文字幕影院 | 久章草在线观看 | 日韩一区精品 | 免费麻豆视频 | 亚洲天天做 | 国产视频一二区 | 天天综合天天做天天综合 | 中文字幕日韩有码 | 欧美日韩久久不卡 | 亚洲成人一二三 | 久久久91精品国产一区二区三区 | 欧美在线视频二区 | 99热国产在线观看 | 亚洲在线国产 | 成人小视频在线观看免费 | 99久久久久国产精品免费 | av黄色免费看 | 成人午夜剧场在线观看 | 九九激情视频 | 国产日韩精品一区二区在线观看播放 | 日一日干一干 | 在线免费视频 你懂得 | 精品免费视频123区 午夜久久成人 | 日韩精品免费一区二区 | 97国产在线播放 | 麻豆精品传媒视频 | 亚洲精品乱码久久久久久高潮 | 免费的国产精品 | 国产在线最新 | 亚洲国产伊人 | 久久精品直播 | 国产97碰免费视频 | 国产精品正在播放 | 蜜臀av免费一区二区三区 | 韩国av一区二区三区在线观看 | 国产91精品一区二区麻豆亚洲 | 中文字幕中文字幕在线一区 | 99久在线精品99re8热视频 | 亚洲成av人影院 | av一区在线播放 | 人人看人人爱 | av三级av| 国产精品免费一区二区三区 | 国产打女人屁股调教97 | 91网在线| 久久久久国产精品午夜一区 | 亚洲黄色网络 | 狠狠色噜噜狠狠狠合久 | 18av在线视频| 91黄色视屏 | 婷婷去俺也去六月色 | 久久视频在线观看中文字幕 | 一区 二区 精品 | 日韩精品中文字幕在线不卡尤物 | 久久久高清视频 | 深爱五月激情网 | 四虎永久视频 | 亚洲精品乱码久久久久久按摩 | 亚洲丁香日韩 | 欧美色婷 | 一区二区三区 亚洲 | 成人黄色大片在线免费观看 | 国产成人精品aaa | 欧美成人黄 | 嫩草伊人久久精品少妇av | av免费网站观看 | 一区二区三区动漫 | 日本99干网 | 亚洲一二视频 | 成人午夜剧场在线观看 | 国产在线播放一区二区三区 | 中文字幕五区 | 免费观看视频黄 | 亚洲日本中文字幕在线观看 | 亚洲精品午夜国产va久久成人 | 精品久久一二三区 | 人人网av| 日本少妇视频 | 香蕉在线播放 | 国产精品视频免费看 | 99视频在线观看免费 | 五月天婷亚洲天综合网精品偷 | 五月婷婷在线观看视频 | 日韩av播放在线 | 久久久香蕉视频 | 免费日韩 精品中文字幕视频在线 | 色资源二区在线视频 | 久久精品2 | 99久久精品免费一区 | 三级黄色欧美 | 国产最新精品视频 | 国产99久久久国产精品 | 黄色小说免费在线观看 | 福利精品在线 | 日韩美女免费线视频 | 色综合久久88色综合天天6 | 天堂av网址 | 丁香 婷婷 激情 | 在线观看一区二区精品 | 69国产盗摄一区二区三区五区 | 成人黄色毛片 | 免费黄色网址网站 | 少妇av片 | 国产在线专区 | 成人av.com| 日日操天天操狠狠操 | 日韩色在线 | 日本精品中文字幕在线观看 | 黄色美女免费网站 | 亚洲伦理一区二区 | 中文资源在线播放 | 欧美巨乳网 | 日韩电影久久久 | wwxxx日本| www好男人| 男女精品久久 | 人人爱爱 | 日韩在线观看小视频 | 毛片无卡免费无播放器 | 国产精品成人久久 | 久久精品之 | 国产精品亚洲精品 | 国产成人精品电影久久久 | 国产视频在线一区二区 | 欧美日韩综合在线 | av中文字幕在线电影 | 日韩高清在线不卡 | 亚洲国产视频网站 | 国产精品色视频 | 精品亚洲成人 | 久久亚洲免费视频 | 久久人人爽人人爽人人片av免费 | 一区二区精品在线 | 一区 在线 影院 | 天天干天天看 | 欧美伦理一区 | 五月婷婷丁香网 | 久久久久久综合 | 中文字幕在线第一页 | 国产永久网站 | 国产又粗又猛又黄又爽的视频 | .精品久久久麻豆国产精品 亚洲va欧美 | 国产午夜精品一区二区三区欧美 | 国产精品久久久久av | 日本丰满少妇免费一区 | 狠狠狠色丁香婷婷综合久久五月 | 激情网站 | 欧美日韩免费一区二区 | 麻豆视频一区二区 | 日日操天天爽 | 国产免费观看视频 | av专区在线| 成年人天堂com | 国产在线一区二区 | 349k.cc看片app | 国产亚洲成人精品 | 久久久999 | 久久影视一区 | 欧美孕妇视频 | 亚洲国产高清在线 | 久久公开视频 | 欧美色图亚洲图片 | av在线专区 | 日韩高清av在线 | 久久国产热 | av中文字幕亚洲 | 4438全国亚洲精品在线观看视频 | 国际精品久久久 | 中文字幕成人一区 | 欧美精品在线一区 | 夜夜干天天操 | 最新精品视频在线 | 人人超碰97| 夜色在线资源 | 天天干,天天插 | 中文av网站 | 国外调教视频网站 | 婷婷干五月 | 亚洲欧洲一区二区在线观看 | 亚洲精品www | 欧美a√大片 | 2019av在线视频 | 99久久婷婷 | 久草在线免费资源 | 69av视频在线 | 日韩.com| 国产一区在线免费观看 | 黄色片免费电影 | 欧美日韩一区二区三区不卡 | 日韩欧美在线观看一区 | 亚洲精品乱码久久久久 | 亚洲一级二级三级 | 久久久久久久久久福利 | 激情 一区二区 | 人人爽人人片 | 高清av网 | 98涩涩国产露脸精品国产网 | 国产在线超碰 | 在线成人一区 | 在线观看日韩中文字幕 | 婷婷网在线 | 久久精品视频99 | 五月天天在线 | 亚洲一区二区三区在线看 | 91亚色视频 | 91麻豆产精品久久久久久 | 亚洲电影在线看 | 伊人天天色 | 综合激情网... | 欧美日本不卡 | 色黄久久久久久 | 一区二区三区在线看 | 99精品免费在线观看 | 免费观看成人 | 2020天天干夜夜爽 | 欧美精品一区二区在线播放 | 91福利视频久久久久 | 人人爽久久久噜噜噜电影 | 超碰国产在线观看 | 激情开心站 | 四虎影院在线观看av | 国产精品久久久久久99 | 欧美精品一区二区在线观看 | 8x8x在线观看视频 | 国产精品专区在线观看 | 久久久久电影网站 | 久艹视频在线免费观看 | 涩涩网站免费 | 97国产一区 | 久久久综合九色合综国产精品 | 国产黄a三级三级三级三级三级 | 超碰在线色 | 日本在线中文 | 开心色停停 | 国产999精品久久久久久绿帽 | 天天射综合网视频 | 天天色天天色 | 成人a视频在线观看 | 超级碰碰视频 | 中文字幕影视 | 中文字幕在线观看1 | 国产色在线,com | 久久不色 | 黄色小网站在线 | 激情影院在线 | 国产高清成人av | 日韩成人精品一区二区三区 | 久久人人爽爽 | 国产在线视频不卡 | 欧美亚洲成人免费 | 久久国产一区二区三区 | 亚洲精品456在线播放乱码 | 国产黄色精品在线观看 | 久久国产精品一区二区 | 国产福利精品一区二区 | 久久深爱网 | 亚洲精品视频在 | 超级碰99 | www.久久久 | 欧美福利视频一区 | 青春草免费视频 | 欧美淫aaa免费观看 日韩激情免费视频 | 国产精品视频在线观看 | 成人久久久久久久久久 | 免费看的黄色 | 亚洲综合最新在线 | 激情视频免费观看 | 91视频麻豆 | 成人久久毛片 | 中文字幕中文 | 精品国产一区二区三区久久久蜜臀 | 涩涩色亚洲一区 | 日日爽天天 | 999久久a精品合区久久久 | 欧美久久久影院 | 国产尤物一区二区三区 | 99久久综合国产精品二区 | 中文字幕视频一区二区 | 女人18精品一区二区三区 | 亚洲国产中文在线观看 | 日本视频高清 | 911在线| 国产精品日韩久久久久 |