iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android自定义SeekBar实现视频播放进度条
  • 527
分享到

Android自定义SeekBar实现视频播放进度条

进度条seekbarAndroid 2022-06-06 01:06:30 527人浏览 八月长安
摘要

首先来看一下效果图,如下所示: 其中进度条如下: 接下来说一说我的思路,上面的进度拖动条有自定义的Thumb,在Thumb正上方有一个PopupWindow窗口,窗口里面显

首先来看一下效果图,如下所示:

其中进度条如下:

接下来说一说我的思路,上面的进度拖动条有自定义的Thumb,在Thumb正上方有一个PopupWindow窗口,窗口里面显示当前的播放时间。在SeekBar右边有一个文本框显示当前播放时间/总时间。

step1、先来看一看PopupWindow的布局文件,seek_popu.xml,效果如下图所示:


<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:Android="Http://schemas.android.com/apk/res/android" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="@drawable/seek_dialog_bg" > 
 <!-- 展现当前播放进度时间的文本框--> 
 <TextView 
  android:id="@+id/dialogSeekTime" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:layout_marginLeft="10dip" 
  android:layout_marginTop="12dip" 
  android:text="@string/unknow_seek_time" 
  android:textColor="@color/black" 
  android:textSize="12sp" /> 
</RelativeLayout> 

step2、自定义一个SeekBar


import com.canplay.video.R; 
import android.content.Context; 
import android.util.AttributeSet; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.PopupWindow; 
import android.widget.SeekBar; 
import android.widget.TextView; 
 
public class MySeekBar extends SeekBar { 
  
 private PopupWindow mPopupWindow; 
 private View mView; 
  
 private TextView dialogSeekTime; 
  
 private int[] mPosition; 
  
 private final int mThumbWidth = 25; 
 public MySeekBar(Context context) { 
  this(context, null); 
 } 
 public MySeekBar(Context context, AttributeSet attrs) { 
  super(context, attrs); 
  mView = LayoutInflater.from(context).inflate(R.layout.seek_popu, null); 
  dialogSeekTime = (TextView) mView.findViewById(R.id.dialogSeekTime); 
  mPopupWindow = new PopupWindow(mView, mView.getWidth(), mView.getHeight(), true); 
  mPosition = new int[2]; 
 } 
  
 private int getViewWidth(View v) { 
  int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
  int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
  v.measure(w, h); 
  return v.getMeasuredWidth(); 
 } 
  
 private int getViewHeight(View v) { 
  int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
  int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
  v.measure(w, h); 
  return v.getMeasuredHeight(); 
 } 
  
 public void hideSeekDialog() { 
  if (mPopupWindow != null && mPopupWindow.isshowing()) { 
   mPopupWindow.dismiss(); 
  } 
 } 
  
 public void showSeekDialog(String str) { 
  dialogSeekTime.setText(str); 
  int progress = this.getProgress(); 
  // 计算每个进度值所占的宽度 
  int thumb_x = (int) (progress * (1.0f * (this.getWidth() - 22) / this.getMax())); //22是两边的空白部分宽度 
  // 更新后的PopupWindow的Y坐标 
  int middle = this.getHeight() / 2 + 120; 
  if (mPopupWindow != null) { 
   try { 
     
    this.getLocationOnScreen(mPosition); 
    // 相对某个控件的位置(正左下方),在X、Y方向各有偏移 
    mPopupWindow.showAsDropDown(this, (int) mPosition[0], mPosition[1]); 
     
    int x = thumb_x + mPosition[0] - getViewWidth(mView) / 2 + mThumbWidth / 2; 
    // 更新popup窗口的位置 
    mPopupWindow.update(x, middle, getViewWidth(mView), getViewHeight(mView)); 
   } catch (Exception e) { 
   } 
  } 
 } 
} 

step3、将自定义的拖动条加入到布局文件中,下面是部分代码


 <?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:background="@android:color/black" > 
...... 
<!-- 进度拖动条 --> 
  <RelativeLayout 
   android:id="@+id/seek_bar_container" 
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content" 
   android:layout_above="@id/control_btn_container" 
   android:background="@drawable/seek_bg" > 
   <com.canplay.video.view.MySeekBar 
    android:id="@+id/seek_progress" 
    android:layout_width="600dip" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" /> 
   <TextView 
    android:id="@+id/currentTime" 
    style="@style/seekTime" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_toRightOf="@id/seek_progress" 
    android:paddingLeft="20dip" 
    android:text="@string/unknow_time" /> 
  </RelativeLayout> 
............... 
</RelativeLayout> 

step4、在主文件中对拖动条进行托动监听


mSeekBar = (MySeekBar) findViewById(R.id.seek_progress); 
mSeekBar.setOnSeekBarChangeListener(mSeekBarListener); 
 
 private OnSeekBarChangeListener mSeekBarListener = new OnSeekBarChangeListener() { 
  // 通知进度已经被修改 
  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
   if (isTouchSeeked) { 
    mSeekBar.showSeekDialog(makeTimeString(progress));//动态展示当前播放时间 
   } else { 
    mSeekBar.hideSeekDialog(); 
   } 
  } 
  // 通知用户已经开始一个触摸拖动手势 
  public void onStartTrackingTouch(SeekBar seekBar) { 
   showControlView(3600000); 
   isTouchSeeked = true; 
  } 
  // 通知用户触摸手势已经结束 
  public void onStopTrackingTouch(SeekBar seekBar) { 
   Message msg = Message.obtain(); 
   msg.what = PROGRESS_SEEKTO; 
   msg.arg1 = seekBar.getProgress(); 
   mHandler.removeMessages(PROGRESS_SEEKTO); 
   mHandler.sendMessageAtTime(msg, 1000);// 1秒之后开始发送更新进度的消息 
   isTouchSeeked = false; 
   showControlView(sDefaultTimeout); 
  } 
 }; 

其中将进度值转换为时间的方法makeTimeString(int secs)如下所示:


 
 private StringBuilder sFORMatBuilder = new StringBuilder(); 
  
 private Formatter sFormatter = new Formatter(sFormatBuilder, Locale.getDefault()); 
  
 private final Object[] sTimeArgs = new Object[3]; 
  
 private String makeTimeString(int secs) { 
   
  String durationformat = getString(R.string.durationformat);// <xliff:g 
        // id="format">%1$02d:%2$02d:%3$02d</xliff:g> 
  sFormatBuilder.setLength(0); 
  secs = secs / 1000; 
  Object[] timeArgs = sTimeArgs; 
  timeArgs[0] = secs / 3600; // 秒 
  timeArgs[1] = (secs % 3600) / 60; // 分 
  timeArgs[2] = (secs % 3600 % 60) % 60; // 时 
  return sFormatter.format(durationformat, timeArgs).toString().trim(); 
 } 

当然,这里只是简单的介绍了下自定义进度条,而该进度条的样式都没有展现出来,样式读者可以自己定义。

您可能感兴趣的文章:Android 可拖动的seekbar自定义进度值Android利用SeekBar实现简单音乐播放器Android 中Seekbar详解及简单实例Android控件之SeekBar的用法总结Android控件SeekBar仿淘宝滑动验证效果Android 动态改变SeekBar进度条颜色与滑块颜色的实例代码Android自定义竖直方向SeekBar多色进度条android之SeekBar控件用法详解Android自定义SeekBar滑动显示数字Android关于SeekBar无法点击到最大值问题解决方法记录(推荐)


--结束END--

本文标题: Android自定义SeekBar实现视频播放进度条

本文链接: https://www.lsjlt.com/news/21932.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • react-player实现视频播放与自定义进度条效果
    环境 react.js   ant design pro 4.0 实现效果 代码 import React from 'react' import { Page...
    99+
    2024-04-02
  • react-player如何实现视频播放与自定义进度条效果
    这篇文章将为大家详细讲解有关react-player如何实现视频播放与自定义进度条效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。环境react.js   ant de...
    99+
    2023-06-28
  • Android SeekBar控制视频播放进度实现的方法是什么
    这篇“Android SeekBar控制视频播放进度实现的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2023-07-05
  • Android怎么自定义视频播放器
    要自定义Android视频播放器,可以按照以下步骤进行: 创建一个新的Android项目,并在布局文件中添加一个SurfaceVi...
    99+
    2023-10-26
    Android
  • vue2.0如何实现音乐/视频播放进度条组件
    这篇文章主要为大家展示了“vue2.0如何实现音乐/视频播放进度条组件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue2.0如何实现音乐/视频播放进度条组件...
    99+
    2024-04-02
  • Android实现绚丽的自定义进度条
    目录前言效果图实现步骤1.绘制背景圆形矩形2.绘制进度3.绘制文字4.加入动画 完整代码前言 进度条是在Android项目中很常用的组件之一,如果想要理解它是怎么实现的,首...
    99+
    2024-04-02
  • Android自定义View实现圆形进度条
    本文实例为大家分享了Android自定义View实现圆形进度条的具体代码,供大家参考,具体内容如下 原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个...
    99+
    2024-04-02
  • Android中怎么自定义一个垂直拖动seekbar进度条
    Android中怎么自定义一个垂直拖动seekbar进度条,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。package com.example.hellovert...
    99+
    2023-05-30
    android seekbar
  • android实现播放网络视频
    本文实例为大家分享了android实现播放网络视频的具体代码,供大家参考,具体内容如下 PlayVideoActivity.java package cn.edu.zufe.a...
    99+
    2024-04-02
  • Python创建一个自定义视频播放器的实现
    要创建一个自定义视频播放器的实现,可以使用Python的多媒体库pygame。以下是一个简单的示例代码:```pythonimpor...
    99+
    2023-08-08
    Python
  • Android如何实现播放视频
    这篇文章将为大家详细讲解有关Android如何实现播放视频,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、通过intent的方式,调用系统自带的播放器  Uri uri&n...
    99+
    2023-05-31
    android
  • Android实现音乐视频播放
    本文实例为大家分享了Android实现音乐视频播放的具体代码,供大家参考,具体内容如下 步骤 1、新建一个安卓项目,再加一个assets包 2、在 assets中加入一段音频 3...
    99+
    2024-04-02
  • js实现播放进度条
    以下是JS实现播放进度条的代码示例:HTML:```html...
    99+
    2023-09-20
    js
  • Angular中如何自定义视频播放器
    本篇内容主要讲解“Angular中如何自定义视频播放器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Angular中如何自定义视频播放器”吧!实现的功能如下:播...
    99+
    2024-04-02
  • Android怎么自定义View实现圆形进度条
    本文小编为大家详细介绍“Android怎么自定义View实现圆形进度条”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android怎么自定义View实现圆形进度条”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。原...
    99+
    2023-07-02
  • Android自定义view实现圆环进度条效果
    本文实例为大家分享了Android自定义view实现圆环进度条效果的具体代码,供大家参考,具体内容如下 一、实现效果图 二、核心代码 自定义view的属性 <xml vers...
    99+
    2024-04-02
  • Android自定义view实现圆形进度条效果
    Android中实现进度条有很多种方式,自定义进度条一般是继承progressBar或继承view来实现,本篇中讲解的是第二种方式。 先上效果图: 实现圆形进度条总体来说并不难,还...
    99+
    2024-04-02
  • Android自定义View实现圆形加载进度条
    本文实例为大家分享了Android自定义View实现圆形加载进度条的具体代码,供大家参考,具体内容如下 效果图 话不多说,咱们直接看代码 首先第一种: 1、创建自定义View类 p...
    99+
    2024-04-02
  • 自定义视图view怎么实现环形进度条
    这篇文章主要介绍“自定义视图view怎么实现环形进度条”,在日常操作中,相信很多人在自定义视图view怎么实现环形进度条问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”自定义视图view怎么实现环形进度条”的疑...
    99+
    2023-07-05
  • Android自定义圆环式进度条
    安卓自定义圆环式进度条,供大家参考,具体内容如下 需求是实现一个圆环式中间带有进度的进度条,自己动手实现一个 package com.djt.aienglish.widget; ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作