android 实现微信 语音信息 样式
1. gif制作:百度一下。在线gif制作
2.有一个喇叭gif , 和 静态的喇叭图, 一般为gif 制作图片的 最后一张。
3. xml 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutandroid:background="@color/white"xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:paddingTop="10dp"android:paddingBottom="10dp"android:paddingLeft="15dp"android:paddingRight="15dp"android:layout_width="wrap_content"android:layout_height="wrap_content"><!-- --><LinearLayoutandroid:id="@+id/ll_lunyinview_luyin"android:gravity="center"android:background="@drawable/lunyin_wxpalyrecorder"android:orientation="horizontal"android:layout_width="120dp"android:layout_height="40dp"><ImageViewandroid:id="@+id/iv_lunyinview_playicon"android:src="@drawable/voice"android:layout_width="30dp"android:layout_height="30dp" /><TextViewandroid:layout_marginLeft="10dp"android:id="@+id/tv_lunyinview_time"android:gravity="center"android:textColor="@color/comm_font_color"android:textSize="14sp"android:text="播放"android:layout_width="wrap_content"android:layout_height="match_parent" /></LinearLayout></LinearLayout>
4.lunyin_wxpalyrecorder 的 drawable图片
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><!-- 高度40 --><size android:height="20dp"/><!-- 圆角弧度 20 --><corners android:radius="5dp"/><!-- 变化率 --><!--<gradient--><!--android:endColor="#33da33"--><!--android:startColor="#33da33" />--><solid android:color="#33da33"></solid></shape>
5.自定位view实现逻辑代码。
public class PlayRecorderView extends LinearLayout {MediaPlayerUtils instance;Context mContext;String mPlayPath="";LinearLayout ll_lunyinview_luyin;View inflate;ImageView iv_lunyinview_playicon;TextView tv_lunyinview_time;MediaPlayerUtils.PlayRecorderFinalListener finalListener;public PlayRecorderView(Context context) {this(context,null);}public PlayRecorderView(Context context, @Nullable AttributeSet attrs) {this(context, attrs,0);}public PlayRecorderView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initView(context);}private void initView(Context context) {mContext =context;instance = MediaPlayerUtils.getInstance();finalListener =new MediaPlayerUtils.PlayRecorderFinalListener() {@Overridepublic void onFinal() {iv_lunyinview_playicon.setImageResource(R.drawable.voice);}@Overridepublic void onStart() {AsynImageUtil.displayGif(R.mipmap.voice,iv_lunyinview_playicon);}};instance.setmPlayRecorderFinalListener(finalListener);inflate = LayoutInflater.from(context).inflate(R.layout.view_playrecorder, PlayRecorderView.this);//ll_lunyinview_luyin = (LinearLayout) inflate.findViewById(R.id.ll_lunyinview_luyin);tv_lunyinview_time = (TextView) inflate.findViewById(R.id.tv_lunyinview_time);iv_lunyinview_playicon = (ImageView) inflate.findViewById(R.id.iv_lunyinview_playicon);//ll_lunyinview_luyin.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (!TextUtils.isEmpty(mPlayPath)){instance.startPlay(mPlayPath);}}});inflate.setVisibility(GONE);}public void setPlayPath(String playPath){mPlayPath =Config.imgBaseUrl+playPath;inflate.setVisibility(VISIBLE);}public void setOffLinePlayPath(String playPath){mPlayPath =playPath;inflate.setVisibility(VISIBLE);} }
6.MediaPlayerUtils
public class MediaPlayerUtils {private static MediaPlayerUtils instance;PlayRecorderFinalListener mPlayRecorderFinalListener;MediaPlayer mMediaPlayer;public static synchronized MediaPlayerUtils getInstance() { // if (instance == null) {instance = new MediaPlayerUtils();// }return instance;}public void startPlay(String audioFile) {if (mPlayRecorderFinalListener!=null){mPlayRecorderFinalListener.onStart();}//配置播放器stopPlay();mMediaPlayer = new MediaPlayer();try {//设置声音文件mMediaPlayer.setDataSource(audioFile);//设置监听回掉mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {stopPlay();mPlayRecorderFinalListener.onFinal();}});mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {//提示用户 释放播放器playFail();stopPlay();mPlayRecorderFinalListener.onFinal();return true;}});//配置音量 是否循环mMediaPlayer.setVolume(1, 1);mMediaPlayer.setLooping(false);//准备 开始mMediaPlayer.prepare();mMediaPlayer.start();} catch (RuntimeException e) {e.printStackTrace();//异常处理防止闪退playFail();} catch (IOException e) {e.printStackTrace();}}private void stopPlay() {//重置播放状态if (mMediaPlayer != null) { // mMediaPlayer.setOnCompletionListener(null); // mMediaPlayer.setOnErrorListener(null);mMediaPlayer.stop();mMediaPlayer.reset();mMediaPlayer.release();mMediaPlayer = null;}}private void playFail() {Toast.makeText(mContext, "播放失败", Toast.LENGTH_SHORT).show();}interface PlayRecorderFinalListener{public void onFinal();public void onStart();}public PlayRecorderFinalListener getmPlayRecorderFinalListener() {return mPlayRecorderFinalListener;}public void setmPlayRecorderFinalListener(PlayRecorderFinalListener mPlayRecorderFinalListener) {this.mPlayRecorderFinalListener = mPlayRecorderFinalListener;} }
还有一个就是 音频播放时间,这个建议从服务器获取,上传的时候把时间传上。如果本地通过
MediaPlayer获取,太消耗内存了。
android 实现微信 语音信息 样式相关推荐
- android放微信@功能,Android仿微信语音消息的录制和播放功能
一.简述 效果: 实现功能: 长按Button时改变Button显示文字,弹出Dialog(动态更新音量),动态生成录音文件,开始录音: 监听手指动作,规定区域.录音状态下手指划出规定区域取消录音,删 ...
- Android 仿微信语音录音小控件
Android 仿微信语音录音小控件 前段时间一直在做IM聊天这方面的撸码工作,涉及到了很多小控件,有时间我会慢慢给大家分享一下我的小成果,希望大家一起学习,一起进步,今天来和大家来说一下Androi ...
- android 仿微信语音聊天
android 仿微信语音聊天 跟着imooc老师学习 代码地址: https://github.com/tingsky9985/Weixin_Recorder
- Android仿微信语音聊天界面设计
这篇文章主要为大家详细介绍了Android仿微信语音聊天界面设计代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间 ...
- 控制台接收信息转发_微信语音信息无法转发?原来这才是正确的转发姿势,看完涨知识了...
平常我们在使用微信的时候一定会发现一个小问题,那就是无论是发送出去的语音还是接收到的语音信息,都无法转发给别人.那么微信语音真的不支持转发吗? 笔者尝试了一下平常使用的消息转发,将语音消息进行转发后出 ...
- android wear 微信语音,moto 360手表语音回复微信教程
moto360智能手表是一款搭载android系统的智能手表,目前微信已经添加了对智能手表的支持.不过很多玩家对于怎么使用moto 360语音回复微信还不是很清楚,下面小编就为大家分享一下moto 3 ...
- Android 实现微信语音聊天
1.效果图 2.代码摘自 imooc 之hyman 视频 代码详情,请移至imooc.com 之 Android-仿微信语音聊天 此处只提供下载 3.源码说明 采用 Android Studio 1. ...
- Android 仿微信语音聊天音量大小显示控件
某日用微信语音功能聊天,发现当我使用语音功能时,会弹出一个窗口,窗口中间有一个控件会实时的显示我说话声音的大小(即分贝).当时觉得挺好玩,决定也仿制一个,效果如下 分析控件显示效果,可判断左边是一个i ...
- android仿微信语音聊天功能,Android仿微信发送语音消息的功能及示例代码
微信的发送语音是有一个向上取消的,我们使用ontouchlistener来监听手势,然后做出相应的操作就行了. 直接上代码: //语音操作对象 private mediaplayer mplayer ...
最新文章
- C++程序中常用的sprintf
- DotNetNuke与MemberShip的结合(五年版)第三步修改HttpModule.DNNMembership
- 1.2.2 OSI参考模型
- golang 遍历文件夹和文件
- 【android-tips】如何在view中取得activity对象
- 2 了解MyBatis配置文件
- php rpc调用,PHP 通过 JSON-RPC 调用实现以太坊交互
- 单片机拼字程序怎么做_家装行业做小程序怎么样?
- 算法—递归实现 C(m,n)
- Microsoft.Ink namespace
- 容器中运行Fabric区块链网络
- 关于var、let和const
- 哪种存储器是非易失的_ROM是易失性存储器还是非易事性存储器?
- 王长震《非财务经理的财务管理沙盘推演课程》
- 生成缩略图 java_java实现生成缩略图
- Unity3dC#分布式游戏服务器ET框架介绍-组件式设计(转)
- 【区块链 | Compound】4.剖析DeFi借贷产品之Compound:清算篇
- C语言 qsort的用法 模拟EXCEL排序
- 合集 | 南邮实验报告目录
- 哥德巴赫猜想c语言 思路,01-哥德巴赫猜想(Goldbach's Conjecture)--(C语言)