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 实现微信 语音信息 样式相关推荐

  1. android放微信@功能,Android仿微信语音消息的录制和播放功能

    一.简述 效果: 实现功能: 长按Button时改变Button显示文字,弹出Dialog(动态更新音量),动态生成录音文件,开始录音: 监听手指动作,规定区域.录音状态下手指划出规定区域取消录音,删 ...

  2. Android 仿微信语音录音小控件

    Android 仿微信语音录音小控件 前段时间一直在做IM聊天这方面的撸码工作,涉及到了很多小控件,有时间我会慢慢给大家分享一下我的小成果,希望大家一起学习,一起进步,今天来和大家来说一下Androi ...

  3. android 仿微信语音聊天

    android 仿微信语音聊天 跟着imooc老师学习 代码地址: https://github.com/tingsky9985/Weixin_Recorder

  4. Android仿微信语音聊天界面设计

    这篇文章主要为大家详细介绍了Android仿微信语音聊天界面设计代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间 ...

  5. 控制台接收信息转发_微信语音信息无法转发?原来这才是正确的转发姿势,看完涨知识了...

    平常我们在使用微信的时候一定会发现一个小问题,那就是无论是发送出去的语音还是接收到的语音信息,都无法转发给别人.那么微信语音真的不支持转发吗? 笔者尝试了一下平常使用的消息转发,将语音消息进行转发后出 ...

  6. android wear 微信语音,moto 360手表语音回复微信教程

    moto360智能手表是一款搭载android系统的智能手表,目前微信已经添加了对智能手表的支持.不过很多玩家对于怎么使用moto 360语音回复微信还不是很清楚,下面小编就为大家分享一下moto 3 ...

  7. Android 实现微信语音聊天

    1.效果图 2.代码摘自 imooc 之hyman 视频 代码详情,请移至imooc.com 之 Android-仿微信语音聊天 此处只提供下载 3.源码说明 采用 Android Studio 1. ...

  8. Android 仿微信语音聊天音量大小显示控件

    某日用微信语音功能聊天,发现当我使用语音功能时,会弹出一个窗口,窗口中间有一个控件会实时的显示我说话声音的大小(即分贝).当时觉得挺好玩,决定也仿制一个,效果如下 分析控件显示效果,可判断左边是一个i ...

  9. android仿微信语音聊天功能,Android仿微信发送语音消息的功能及示例代码

    微信的发送语音是有一个向上取消的,我们使用ontouchlistener来监听手势,然后做出相应的操作就行了. 直接上代码: //语音操作对象 private mediaplayer mplayer ...

最新文章

  1. C++程序中常用的sprintf
  2. DotNetNuke与MemberShip的结合(五年版)第三步修改HttpModule.DNNMembership
  3. 1.2.2 OSI参考模型
  4. golang 遍历文件夹和文件
  5. 【android-tips】如何在view中取得activity对象
  6. 2 了解MyBatis配置文件
  7. php rpc调用,PHP 通过 JSON-RPC 调用实现以太坊交互
  8. 单片机拼字程序怎么做_家装行业做小程序怎么样?
  9. 算法—递归实现 C(m,n)
  10. Microsoft.Ink namespace
  11. 容器中运行Fabric区块链网络
  12. 关于var、let和const
  13. 哪种存储器是非易失的_ROM是易失性存储器还是非易事性存储器?
  14. 王长震《非财务经理的财务管理沙盘推演课程》
  15. 生成缩略图 java_java实现生成缩略图
  16. Unity3dC#分布式游戏服务器ET框架介绍-组件式设计(转)
  17. 【区块链 | Compound】4.剖析DeFi借贷产品之Compound:清算篇
  18. C语言 qsort的用法 模拟EXCEL排序
  19. 合集 | 南邮实验报告目录
  20. 哥德巴赫猜想c语言 思路,01-哥德巴赫猜想(Goldbach's Conjecture)--(C语言)

热门文章

  1. 读《移动互联网白皮书》有感
  2. IT大败局----第十一章 科技虚幻的诱惑
  3. 企业管理应具备哪些软件
  4. linux下进入bios设置u盘启动项,u盘启动g4l_u盘启动快捷键_bios设置u盘启动
  5. Android下DLNA开发简介
  6. 大厂的区块链之路 | 百度开启富场景模式直达宇宙
  7. 【Stata】从入门到精通.零基础小白必学的教程,一学就fei
  8. 细说linux挂载---转自ubuntu论坛 adagio
  9. 在kindle阅读PDF的较好的解决方法
  10. Excel作图汇总 - Excel2010