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

2016-05-14 21:05张香倩黄林生陈阳德
软件导刊 2016年5期

张香倩 黄林生 陈阳德

摘要:针对日益增加的个性化应用需求,提出了基于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程序中,进而与服务器结合实现媒体文件的远端管理。

参考文献:

[1]马建敏.基于Android的蒙文基本控件的设计与实现[D].呼和浩特:内蒙古大学,2014.

[2]王建功.基于Android的自定义控件设计[J].德州学院学报,2015,31(2):62-65.

[3]关晶鑫,李永全.Android中的多媒体技术应用开发与研究[J].桂林理工大学学报,2013,33(3):542-546.

[4]李杨,冯刚,李亮,等.基于Android的多媒体应用开发与研究[J].华南师范大学学报,2011(4):149-152.

[5]叶晓静,黄俊伟.基于Android系统的多媒体播放器解决方案[J].现代电子技术,2011,34(24):73-76.

[6]赵晓影.Android应用开发中的UI设计[J].劳动保障世界,2013(5):111-113.

[7]赵亮,张维.基于Android技术的界面设计与研究[J].电脑知识与技术,2009(29):8183-8185.

[8]李哲夫,张焕明.基于Android的校园流媒体播放系统设计与实现[J].现代计算机,2013(10):67-71.

[9]汪永松.Android平台开发媒体盒子[J].电脑编程技巧与维护,2010(19):62-68.

[10]张小菲.Android平台上音视频系统的研究及播放器开发[D].西安:西安电子科技大学,2012.

[11]李光革,苗建松.基于Android的物联网环境监控应用设计与实现[J].软件,2013,34(9):32-35.

(责任编辑:杜能钢)