Android項(xiàng)目實(shí)現(xiàn)視頻播放器
本文實(shí)例為大家分享了Android項(xiàng)目實(shí)現(xiàn)視頻播放器的具體代碼,供大家參考,具體內(nèi)容如下
VideoView控件是播放視頻用的,借助它可以完成一個(gè)簡易的視頻播放器。
①在activity_main.xml中編寫相應(yīng)的控件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ImageView android:id="@+id/bt_play" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="150dp" android:src="@android:drawable/ic_media_play" /> <VideoView android:id="@+id/videoview" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
②在MainActivity實(shí)現(xiàn)SeekBar.OnSeekChangeListener接口與SurfaceHolder.Callback接口,并重寫這兩個(gè)接口中對(duì)應(yīng)的方法,在這些方法中實(shí)現(xiàn)播放視頻的。
package com.example.videoview; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.MediaController; import android.widget.VideoView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private VideoView videoView; private MediaController controller; ImageView iv_play; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); videoView = (VideoView) findViewById(R.id.videoview); iv_play = (ImageView) findViewById(R.id.bt_play); //拼出在資源文件夾下的視頻文件路徑String字符串 String url = "android.resource://" + getPackageName() + "/" + R.raw.video; //字符串解析成Uri Uri uri = Uri.parse(url); //設(shè)置videoview的播放資源 videoView.setVideoURI(uri); //VideoView綁定控制器 controller = new MediaController(this); videoView.setMediaController(controller); iv_play.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_play: play(); break; } } // 播放視頻 private void play() { if (videoView != null && videoView.isPlaying()) { iv_play.setImageResource(android.R.drawable.ic_media_play); videoView.stopPlayback(); return; } videoView.start(); iv_play.setImageResource(android.R.drawable.ic_media_pause); videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { iv_play.setImageResource(android.R.drawable.ic_media_play); } }); } }
③修改清單文件,設(shè)置屬性screenOrientation為橫向。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 8.0中一些坑以及對(duì)應(yīng)的解決方法
這篇文章主要給大家介紹了關(guān)于Android 8.0中一些坑以及對(duì)應(yīng)的解決方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09Fragment里添加ListView不要用ListFragment
這篇文章主要介紹了Fragment里添加ListView不要用ListFragment,需要的朋友可以參考下2015-07-07React Native開發(fā)中自動(dòng)打包腳本的實(shí)例代碼
這篇文章主要介紹了React Native開發(fā)中自動(dòng)打包腳本的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09Android 版本、權(quán)限適配相關(guān)總結(jié)
針對(duì) Android 6.0 (API 23)已以上版本,Google 增強(qiáng)全新的權(quán)限,應(yīng)用程序在使用敏感權(quán)限(如拍照、查閱聯(lián)系人或存儲(chǔ))時(shí)需要先征求用戶必須贏得用戶同意。2021-05-05Android系統(tǒng)檢測程序內(nèi)存占用各種方法
這篇文章主要介紹了Android系統(tǒng)檢測程序內(nèi)存占用各種方法,本文講解了檢查系統(tǒng)總內(nèi)存、檢查某個(gè)程序的各類型內(nèi)存占用、檢查程序狀態(tài)、檢查程序各部分的內(nèi)存占用等內(nèi)容,需要的朋友可以參考下2015-03-03Android開發(fā)中數(shù)據(jù)庫升級(jí)且表添加新列的方法
這篇文章主要介紹了Android開發(fā)中數(shù)據(jù)庫升級(jí)且表添加新列的方法,結(jié)合具體實(shí)例形式分析了Android數(shù)據(jù)庫升級(jí)開發(fā)過程中常見問題與相關(guān)操作技巧,需要的朋友可以參考下2017-09-09