基于Android的自定义媒体播放控件设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Android的自定义媒体播放控件设计与实现

摘要:针对日益增加的个性化应用需求,提出了基于Android的自定义媒体播放控件。该控件通过继承VideoView 实现视频、图片媒体的播放,与网络、数据库进行结合可以下载媒体资源与管理资源。控件中定义了下载回调,即实时显示当前的、下载进度,因而有助于提升用户体验。

关键词:Android;自定义控件;媒体播放;VideoView DOIDOI:10.11907/rjdk.161461

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2016)005-0079-03

0 引言

在Android系统中,提供了很多控件用于Android应用的开发,其控件的丰富性能可满足基本的应用开发需求。但是随着定制应用的日益增加,基本的控件已很难满足需求,从另一方面而言,这也约束了个性化应用的发展。Google提供的自定义控件方法可以达到应用开发的个性化要求[1]。在Android程序中,视频媒体播放使用VideoView控件实现,或者使用MediaPlayer与SurfaceView结合实现媒体播放功能。对于图片的显示则使用ImageView来实现[2]。日常生活中,视频和图片都是大众最常见的媒体,在一个界面上要既能显

示图片又能显示视频,所以,本文提出了一种继承VideoView 的自定义媒体播放控件,该控件不仅可以显示图片,还可以播放视频,并且在下载视频的过程中可以显示下载进度。同时,自定义媒体播放控件和数据库结合,能够实现媒体文件的自动循环播放。

1 Android系统

Android系统由Google公司2007年在Google I/O开发者大会上发布的移动操作系统,Google将其源码开放以供广大开发者研究。Android系统采用分层架构,具体分为Applications、Application Framework、Libraries(包含Android Runtime)、Linux Kernel四层。Android应用开发者最常接触的是前两层,后两层主要用于底层库和硬件驱动等[3-5]。

2 View及其自定义媒体控件相关类

2.1 View类介绍

在Android系统的Application Framework层,提供了丰富的UI控件,所有UI控件都是直接或间接继承View类。View 类是所有UI控件的基类,该类表示了用户界面的基本构建模块――一个View占用屏幕的矩形区域并且负责界面绘制和事件处理[6-7]。

View类中有很多方法,这些方法都与其界面绘制和事件处理相关,下面简单介绍几个方法:

①onMeasure(int,int):该方法用于获取控件的宽、高,

由系统的measure方法调用;

②onDraw(Canvas):该方法用于绘制需要在View中显示的内容,由系统的draw函数调用;

③onLayout(boolean,int,int,int,int):该方法用于指定View的位置,由系统的layout函数调用;

④onSizeChanged(int,int,int,int):该方法用于当View 大小改变时进行调用。

2.2 自定义媒体控件相关类

(1)VideoView类[8-9]。

本文中自定义媒体播放控件的实现采用继承VideoView 类。VideoView类在包android.widget中,其继承自android.widget.SurfaceView类。VideoView有几个重要的方法,如setVideoPath()、setBackground()、start()、seekTo()、getCurrentPosition()等。setVideoPath方法可以设置视频路径,setBackground方法可以设置背景,start方法可以开始播放。

(2)Drawable类。

Drawable类是一个抽象类,用于在屏幕上绘制图片,即可以显示图片,但没有事件处理能力。子类主要复写其onDraw方法,然后在里面绘制需要呈现的图片。

(3)SurfaceView类[10-11]。

SurfaceView在包android.view中,它是一种特殊的视图,

拥有独立的绘图界面,绘图可以在一个独立的线程中进行。SurfaceView可以实现复杂而高效的UI且不会导致用户输入响应不及时。

3 自定义媒体播放控件实现

3.1 概述

自定义媒体播放控件实现的功能包括:播放视频、播放图片、下载视频、下载图片等。Android为开发者提供了很多的API,其中就有实现媒体播放的类,如VideoView。本实现通过继承VideoView实现播放功能,在其子类中能够获取到媒体文件的播放状态、当前播放位置等。其次,自定义继承自Drawable类的内部类BackgroundDrawable用于显示大图。

3.2 逻辑设计及实现

要实现5个方面的功能:①用于获取数据的数据库操作类及数据类;②继承VideoView类的子类VideoPlayer;③用于实现大图缩放处理的BackgroundDrawable类;④用于实现播放流程控制的PlayControl类;⑤用于下载视频、图片的类WgetDownload。下面分别介绍其逻辑设计。

(1)数据库操作类及数据类。

数据库操作类需要实现数据库的基本功能,如查找、删除、增加等。在本实现中采用OrmLite框架,构建数据库操作类VideoRecord与ImageRecord,用于操作数据VideoTable、

ImageTable,提供给外部操作数据库的方法。其中VideoRecord、ImageRecord通过MediaDBHelper获取。此外,在MediaDBHelper中实现创建数据表、更新数据表功能。

如图1所示,当程序启动时,初始化单例类MediaDBHelper 类,该类用于创建表和提供获取VideoRecord及ImageRecord 的方法,代码如下:

(2)VideoPlayer类。

VideoPlayer类主要用于播放视频、图片,同时实现下载回调接口WgetCallback,实现播放顺序控制PlayControl类的复写。在下载回调中,可以由函数ready、process、finished 显示下载进度。其内部逻辑如图2所示。

4 结语

本文在介绍VideoView的基础上,提出了继承VideoView 实现自定义媒体播放控件的类VideoPlayer。介绍了在该类中使用的其它辅助类,如数据库操作类用于加载数据等,类BackgroundDrawable用于有效显示大图,类PlayControl用于控制播放顺序,类WgetDownload用于下载媒体文件。在这

些类的辅助下,VideoPlayer控件实现设计的功能,将该控件布局在XML文件中即可。其中数据类可以自定义其属性,根据需求将该控件布置在Android程序中,进而与服务器结合

实现媒体文件的远端管理。

参考文献:

相关文档
最新文档