Android自定义SeekBar实现实时视频播放进度指示

8 下载量 107 浏览量 更新于2024-09-04 收藏 139KB PDF 举报
"本文档详细介绍了如何在Android开发中实现一个自定义的SeekBar来模拟视频播放进度条的功能。通过自定义Thumb以及结合PopupWindow来展示当前播放时间和总时间,提供了实际的代码示例和关键步骤。首先,开发者会看到一个包含自定义Thumb和PopupWindow的界面设计,其中PopupWindow用于实时显示播放时间和背景样式。接着,文档指导读者创建一个自定义的SeekBar类,该类继承自原生的SeekBar,并可能重写了onTouchEvent()方法以响应用户滑动手势。 在自定义SeekBar的步骤中,第一步是设计一个叫做seek_popu.xml的PopupWindow布局文件,它包含一个TextView用于显示当前播放时间,设置好布局的尺寸、颜色和文字样式。第二步是编写自定义SeekBar,这里涉及到使用LayoutInflater来动态加载布局,并可能通过setOnSeekBarChangeListener监听器来更新播放时间和显示总时间。在SeekBar右侧的文本框也会同步更新,以便用户了解播放进度。 实现过程中,可能还需要处理如以下几点: 1. 自定义Thumb:可能通过继承自SeekBar的Drawable类或者使用ImageView作为基础,设置特定的图片或形状,并在用户滑动时改变其位置和状态。 2. PopupWindow的显示与隐藏:当用户滑动SeekBar时,需要根据SeekBar的当前位置动态显示或隐藏PopupWindow,同时更新TextView中的时间信息。 3. 时间格式化:为了提供友好的用户体验,可能需要将秒转换为更易理解的时间格式(如mm:ss)。 4. 用户交互优化:考虑加入缓动效果,使进度条滑动更加平滑,以及提供点击事件处理,比如暂停、播放、快进或后退等操作。 5. 性能优化:如果SeekBar有大量的滑动事件,可能会考虑使用RecyclerView或ViewHolder来提高性能。 这篇文档提供了从基础概念到具体代码实现的完整指南,帮助Android开发者在项目中创建出具有交互性的视频播放进度条控件,提升用户体验。"
2013-05-29 上传
音频播放实现暂停开始等 }); btnStop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub musicStop(); } }); player.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub if(currentPlayMusicNum<musicList.size()){ currentPlayMusicNum+=1; }else{ currentPlayMusicNum=0; } musicStart(currentPlayMusicNum); } }); lvShowMusicList.setOnItemClickListener(new OnItemClickListener() { @SuppressLint("ResourceAsColor") @Override public void onItemClick(AdapterView parent, View view, int position, long id) { if(saveView==view){ saveView.setBackgroundResource(R.color.nocolor); currentPlayMusicNum=0; } else{ if(saveView!=null) saveView.setBackgroundResource(R.color.nocolor); view.setBackgroundResource(R.color.colorblue); saveView=view; currentPlayMusicNum=position; musicStart(currentPlayMusicNum); } //id_this=position; } }); sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub if(fromUser){ sb.setProgress(progress); //musicPause(); MusicModel music=musicList.get(currentPlayMusicNum); music.setPlayTime(music.getAllTime()*progress/100); //pausePosition=(int) (music.getAllTime()*progress/100); player.seekTo((int) music.getPlayTime()); player.start(); } } }); }