張香倩 黃林生 陳陽德


摘要:針對日益增加的個性化應用需求,提出了基于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.
(責任編輯:杜能鋼)