Android高級_視頻播放控制項

来源:http://www.cnblogs.com/BobGo/archive/2016/06/18/5596100.html
-Advertisement-
Play Games

一、Android系統自帶VideoView控制項 1. 創建步驟: (1)自帶視頻文件放入res/raw文件夾下; (2)聲明初始化VideoView控制項; (3)創建視頻文件Uri路徑,Uri調用parse(),傳入(”android.resource://”+getPackageName()+” ...


一、Android系統自帶VideoView控制項

       1. 創建步驟:

              (1)自帶視頻文件放入res/raw文件夾下;

              (2)聲明初始化VideoView控制項;

              (3)創建視頻文件Uri路徑,Uri調用parse(),傳入(”android.resource://”+getPackageName()+”/”+R.raw.video)當前字元串獲取資源路徑;

              (4)為視頻控制項設置播放路徑,VideoView對象調用setVideoURI(),傳入Uri對象;

              (5)開始播放,VideoView對象調用start();

       2. 重寫控制項onMeasure(),設置VideoView的自定義寬高;MeasureSpec對象調用getSize()傳入widthMeasureSpec常量和heighMeasureSpec常量獲得屏幕寬度和高度,之後調用setMeasuredDimension(),傳入寬度和高度設置控制項的寬度和高度;

       3. VideoView控制方法:

              start():從當前位置啟動視頻;

              pause():暫停視頻;

              isPlay():判斷當前視頻是否在播放;

              getDuration():獲得當前播放視頻的總時長(單位:毫秒);

              getCurrentPosition():獲得當前視頻播放時長(單位:毫秒);

       4. VideoView監聽事件:

              setOnPreparedListener():視頻準備監聽,傳入實現MediaPlayer.OnPreparedListener介面的對象,重寫onPrepared(),視頻準備播放之後調用此方法;

              setOnCompletionListener():視頻播放完成監聽,傳入實現MediaPlayer.OnCompletionListener介面的對象,重寫onCompleted(),在視頻播放完成之後調用此方法;

              setOnErrorListener():視頻播放錯誤監聽,傳入實現MediaPlayer.OnErrorListener介面的對象,重寫onError(),在視頻播放出錯時調用此方法;

              setOnTouchListener():觸摸監聽事件,傳入實現View.OnTouchListener介面的對象,重寫onTouch(),觸摸控制項之後調用此方法;

                     註意:該方法之後如果返回false,則event.getAction()只能監聽到MotionEvent.ACTION_DOWN,無法監聽到MotionEvent.ACTION_UP事件;而只有返回true,可以將觸摸事件向下分發,才能監聽MotionEvent.ACTION_UP事件;

       5. VideoView與Seekbar結合的視頻播放控制項效果:

              (1)初始化Seekbar和VideoView控制項;

              (2)使用本地路徑創建Uri對象,Uri類調用靜態方法parse(),傳入資源路徑字元串常量,視頻保存路徑為res/raw文件夾下,則字元串常量值為:"android.resource://"+getPackageName()+"/" + R.raw.video_test;

              (3)關聯VideoView的Uri路徑,VideoView對象調用setVideoURI(),傳入Uri對象;

              (4)啟動VideoView播放視頻,VideoView調用start();

              (5)為控制佈局中的播放暫停按鈕設置點擊監聽事件,傳入實現onClickListener介面的對象,重寫onClick(),在此方法內判斷VideoView控制項的視頻是否播放,調用isPlaying(),如果正在播放,VideoView調用pause()暫停;否則VideoView調用start()開啟,之後獲取視頻當前播放進度和總時長,放入Handler對象的消息隊列中延時1000ms發送;

              (6)為VideoView控制項設值視頻播放監聽事件,調用setOnPreparedListener(),在重寫的onPrepared()中獲取當前播放進度和總時長,放入消息隊列延遲1000ms發送;

              (7)為Seekbar控制項進度條設值拉動監聽事件,調用setOnSeekBarChangeListener(),傳入實現SeekBar.OnSeekBarChangeListener()介面的對象,重寫onProgressChanged(),在該方法內判斷fromUser為true時為VideoView設置進度,調用seekTo()傳入用戶拖動進度;之後先清空消息,再重新發送總時長和播放進度消息;

              (8)為VideoView控制項設置觸摸事件監聽,調用setOnTouchListener(),傳入實現OnTouchListener介面的對象,重寫onTouch(),在該方法內如果是按下事件,顯示底部導航,同時3000ms後發送消息通知,隱藏底部導航;

              (9)在消息處理事件中,先判斷消息類型,如果是控制進度條的消息,重新設置進度條,之後再次發送VideoView的當前播放時間和總時長;如果是隱藏控制欄的消息類型,則控制欄調用setVisibility(),傳入View.GONE;

 

二、Android系統底層SurfaceView控制項

       1. SurfaceView與MediaPlayer結合使用,代替VideoView的原因:VideoView中自帶MediaPlayer,在ListView中的Item中多次使用之後會使系統記憶體過大;

       2. 使用步驟:

              (1)佈局文件中創建SurfaceView控制項,在Activity中聲明並初始化該控制項;

              (2)聲明並實例化MediaPlayer對象;

              (3)獲取SurfaceHolder對象,用於改變SurfaceView的像素點,SurfaceView對象調用getHolder();

              (4)SurfaceHolder對象調用addCallback(),傳入實現SurfaceHolder.Callback介面的對象,重寫三個方法:

                     方法1:surfaceCreate():當SurfaceView創建時調用此方法,在此方法內開啟視頻播放;

                     方法2:surfaceChanged():SurfaceView在像素點發生改變時調用此方法;

                     方法3:surfaceDestroy():SurfaceView在銷毀之後調用此方法;

              (5)開啟視頻播放步驟:

                     (5-1)在視頻播放前重置MediaPlayer,MediaPlayer對象調用reset();

                     (5-2)獲取視頻地址,創建Uri對象,Uri類調用靜態方法parse(),傳入資源路徑,如“”android:resource://”+getPackageName()+”/”+R.raw.test”;

                     (5-3)改視頻播放器設置SurfaceHolder,MediaPlayer對象調用setDisplay(),傳入SurfaceHolder對象;

                     (5-4)關聯視頻播放地址,MediaPlayer對象調用setDataSource()傳入上下文對象和Uri對象;

                     (5-5)開啟非同步準備視頻,MediaPlayer對象調用prepareAsync()即可;

              (6)為MediaPlayer設置準備完成監聽事件,MediaPlayer對象調用setOnPreparedListener(),傳入實現MediaPlayer.OnPreparedListener介面的對象,重寫onPrepared(),在該方法內傳入的形參MediaPlayer對象調用start();

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先搭建模擬web 伺服器,新建動態web項目,servlet代碼如下: 再新建一個jsp頁面 新建android項目,頁面佈局: 代碼如下: 添加許可權:android.permission.INTERNET 運行項目後點擊按鈕後提示錯誤: 06-18 21:08:16.237: W/System. ...
  • 文件命名規範: 1. 項目統一使用類首碼ZY。 2. 分類命名+後面統一使用ZYExtension,例:NSDictionary+ZYExtension.h,常用分類定義在內部並寫好文檔註釋。如果功能性分類內部方法較多可以考慮按功能命名。 3. model文件可按伺服器介面名或欄位名命名,view、 ...
  • 【版權所有,轉載請註明出處。出處:http://www.cnblogs.com/joey-hua/p/5596746.html 】 首先看main.c里的初始化函數main函數裡面有個函數是對進程調度的初始化,sched_init()函數,次函數在sched.c中實現: 首先初始化任務0的TTS,F ...
  • 昨晚蘋果在舊金山召開了WWDC,看了WWDC2016直播,我們發現變得謹慎而開放的蘋果在新一版四大平臺系統中展示了很多變化,當然重中之重還是偉大的iOS。通過試用iOS10beta版,除了長大了的更強大的Siri主要感受到iMessage更加如微信般強大到除了一般的文字、圖片、表情、語音消息,還支持 ...
  • 《Android 內容觀察者的原理》中介紹了內容觀察者的一些基本原理,並做了簡單的實戰,本文接著進一步做一個小項目實戰 添加許可權:android.permission.READ_SMS 運行代碼後,只要簡訊發生變化,都會提示,並且簡訊的內容會自動保存在XXX.abc文件中 ...
  • 效果圖 具體實現代碼如下 ZCWScrollNumView.h文件 ZCWScrollNumView.m文件 控制端代碼 ...
  • 攔截簡訊,比如當發簡訊的時候,就把簡訊讀取出來,當系統的簡訊發生變化的時候,大叫一聲,把數據發送到公共的消息郵箱裡面,我們的應用通過內容觀察者觀察公共的消息郵箱 獲取ContentResolver對象,調用函數getContentResolver(), 調用ContentResolver對象的reg ...
  • 上文中《Android 獲取系統的聯繫人》主要介紹了怎樣獲取系統聯繫人並實戰了一下,本文將介紹如何添加一條聯繫人信息 添加聯繫人 1. 添加raw_contacts表,添加一條聯繫人的id 2. 操作data表,插入聯繫人的數據,每個聯繫人數據都對應一列 raw_contact_id 新建項目,佈局 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...