Android仿微信视频聊天窗口,Android仿微信语音聊天界面设计

本文介绍如何在Android应用中实现类似微信的语音聊天功能,包括录音、播放、界面交互等。通过自定义AudioRecorderButton,结合DialogManager和MediaPlayerManager,实现了录音、播放、音量显示和对话框管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间写了个学习记录。代码和老师讲的基本一样,网上也有很多相同的博客。我只是在AndroidStudio环境下写的。

—-主界面代码——

public class MainActivity extends Activity {

private ListView mListView;

private ArrayAdapter mAdapter;

private List mDatas = new ArrayList();

private AudioRecorderButton mAudioRecorderButton;

private View animView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mListView = (ListView) findViewById(R.id.id_listview);

mAudioRecorderButton = (AudioRecorderButton) findViewById(R.id.id_recorder_button);

mAudioRecorderButton.setFinishRecorderCallBack(new AudioRecorderButton.AudioFinishRecorderCallBack() {

public void onFinish(float seconds, String filePath) {

Recorder recorder = new Recorder(seconds, filePath);

mDatas.add(recorder);

//更新数据

mAdapter.notifyDataSetChanged();

//设置位置

mListView.setSelection(mDatas.size() - 1);

}

});

mAdapter = new RecoderAdapter(this, mDatas);

mListView.setAdapter(mAdapter);

//listView的item点击事件

mListView.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView> arg0, View view, int position, long id) {

// 声音播放动画

if (animView != null) {

animView.setBackgroundResource(R.drawable.adj);

animView = null;

}

animView = view.findViewById(R.id.id_recoder_anim);

animView.setBackgroundResource(R.drawable.play_anim);

AnimationDrawable animation = (AnimationDrawable) animView.getBackground();

animation.start();

// 播放录音

MediaPlayerManager.playSound(mDatas.get(position).filePath, new MediaPlayer.OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {

//播放完成后修改图片

animView.setBackgroundResource(R.drawable.adj);

}

});

}

});

}

@Override

protected void onPause() {

super.onPause();

MediaPlayerManager.pause();

}

@Override

protected void onResume() {

super.onResume();

MediaPlayerManager.resume();

}

@Override

protected void onDestroy() {

super.onDestroy();

MediaPlayerManager.release();

}

—自定义Button——-

/**

* @param

* @author ldm

* @description 自定义Button

* @time 2016/6/25 9:26

*/

public class AudioRecorderButton extends Button {

// 按钮正常状态(默认状态)

private static final int STATE_NORMAL = 1;

//正在录音状态

private static final int STATE_RECORDING = 2;

//录音取消状态

private static final int STATE_CANCEL = 3;

//记录当前状态

private int mCurrentState = STATE_NORMAL;

//是否开始录音标志

private boolean isRecording = false;

//判断在Button上滑动距离,以判断 是否取消

private static final int DISTANCE_Y_CANCEL = 50;

//对话框管理工具类

private DialogManager mDialogManager;

//录音管理工具类

private AudioManager mAudioManager;

//记录录音时间

private float mTime;

// 是否触发longClick

private boolean mReady;

//录音准备

private static final int MSG_AUDIO_PREPARED = 0x110;

//音量发生改变

private static final int MSG_VOICE_CHANGED = 0x111;

//取消提示对话框

private static final int MSG_DIALOG_DIMISS = 0x112;

/**

* @description 获取音量大小的线程

* @author ldm

* @time 2016/6/25 9:30

* @param

*/

private Runnable mGetVoiceLevelRunnable = new Runnable() {

public void run() {

while (isRecord

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值