Android視屏的記錄①
項目的要求本來是一個視屏圖片的混合輪播,但是在此之前沒有視屏方面的接觸。所以花了一些時間對Android原生視屏做了一些瞭解!
下面一起來看看我的腳印。
配置
開發工具:Android studio 3.1.4
模擬器版本:Android 4.2/API17
OK!話不多說,下面來看一下Android原生VideoView的使用。
xml:
<VideoView
android:id="@+id/act_video_video"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Activity:
申明控件:
VideoView videoView ;
綁定控件:
videoView = findViewById(R.id.act_video_video) ;
設置視屏路徑:
網絡的:
Uri uri = Uri.parse(url) ;//url:網絡地址
videoView.setVideoURI(uri);
本地的:
videoView.setVideoPath(path);
播放:
videoView.start();
完整的activity:
VideoView videoView ;
Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayout());
videoView = findViewById(R.id.act_video_video) ;
String url = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" ;
Uri uri = Uri.parse(url) ;
videoView.setVideoURI(uri);
videoView.start();
}
png:
顯示工具框:
MediaController mediaController = new MediaController(this) ;
videoView.setMediaController(mediaController);
png
播放監聽:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Toast.makeText(Video_Activity.this, "視屏加載完成,開始播放!", Toast.LENGTH_SHORT).show();
}
});
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(Video_Activity.this, "視屏播放結束!", Toast.LENGTH_SHORT).show();
}
});
自循環播放:
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.setLooping(true);
}
});
模擬器上我試了,不能循環!真機倒是可以的。但是真機的版本是Android 7.0的 (-.-)!腦殼痛。
OK!基本上的使用講完了,現在講幾個問題:
1、加載的問題,有時會出現視屏未加載出來黑屏的情況,這很影響用戶的體驗。
2、GC機制,上面這麼寫播放是沒有問題的,可是有些人播放久了會出現GC_CONCURRENT問題。
3、點擊事件,上面我已經說過,我的原需求是做廣告輪播的,所以我需要一個點擊跳轉事件。
4、我們都知道有一個東西叫做三級緩存!我們的VideoView也是自帶了緩存播放的。but不是我想要的那種!我們不能每次都去從網上加載視屏(無關其他,我覺得這樣很low!)
思路:
第一個問題,我們可以加一個ProgressBar,我們上面有一個加載完成的監聽,當視屏加載好了之後把progressbar隱藏了就OK了
第二個問題:https://blog.csdn.net/chenrenxiang/article/details/80634330
第三個問題:我也已經百度好了,重寫OnTuch方法
第四個問題:我在 https://www.jianshu.com/p/2733e0b217f4 這篇博客中發現了一個庫:AndroidVideoCache