类似有道云笔记那种,每条笔记可以插入音频文件,在ListView中呈现。
1、音频文件的显示使用自定义组合控件InsertAudioView,并通过自定义接口audioClickListener,对外暴露一个设置监听的方法setOnAudioClickListener,在该控件的初始化操作中为其设置点击事件。

 public void setOnAudioViewClickListener(audioViewClickListener listener) {        this.mListener = listener;    }    public interface audioViewClickListener {        void onAudioViewClick();    }    public void setInsertAudioViewText(String string) {        mTextView.setText(string);    }    //设置插入的音频文件名称    public void setInsertAudioViewTextSize(int size) {        mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);    }
 setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mListener.onAudioViewClick();            }        });

2、音频播放
adapter扩展于BaseAdapter,在getView方法中,通过ViewHolder获取到item布局和所有控件,点击选择某个item的音频文件后,使用MediaPlayer进行播放,此处需要注意,为保证整个ListView中只有一个MediaPlayer,最后使用单例模式,考虑线程安全,我用的饿汉式。当然如果没有使用单例模式也是可以的,除了第一次播放,以后每次播放MediaPlayer在setDataResource之前都要reset一下,原因参考MediaPlayer的状态转化图:

点击播放后,音频布局要变成播放进度条这样的:

而其他未被点击的,或者点击了未播放完的item中的音频布局还是最初的自定义控件显示。
3、因此,播放音频之前,重置所有item中的音频布局。在getView方法之外,写一个重置布局的方法,遍历ListView中所有的item:

 /** * 重置所有的item音频显示布局 */    private void resetSoundView() {        for (int i = 0; i < mListView.getChildCount(); i ++){            View childView= mListView.getChildAt(i);            InsertAudioView insertAudioView = (InsertAudioView) childView.findViewById(R.id.diary_item_sound);            LinearLayout play_audio_view = (LinearLayout) childView.findViewById(R.id.diary_item_sound_play);            insertAudioView.setVisibility(View.VISIBLE);            play_audio_view.setVisibility(View.INVISIBLE);        }    }

大功告成~~

更多相关文章

  1. Android对View的onMeasure方法理解
  2. android 布局之ConstraintLayout的使用
  3. 自定义控件SettingItemView
  4. layout 布局
  5. 最全面的Android(安卓)Studio使用教程(图文)
  6. Android(安卓)Audio System 之一 Audio (1) AudioTrack如何与Aud
  7. Android中的Audio播放:音量和远程播放控制
  8. android自定义控件基础
  9. 11.3、Libgdx的音频之播放PCM音频

随机推荐

  1. SQL Server 2008 R2登录失败的解决方法
  2. SQL SERVER 2012新增函数之逻辑函数IIF
  3. SQL SERVER 2012新增函数之字符串函数FOR
  4. SQL SERVER 2012新增函数之逻辑函数CHOOS
  5. SQL SERVER2012中新增函数之字符串函数CO
  6. SQL Server中利用正则表达式替换字符串的
  7. Sql Server中判断表、列不存在则创建的方
  8. 数据库SQL语句优化总结(收藏)
  9. MySQL查询两个日期之间记录的方法
  10. SQL中Exists的用法