編輯:關於Android編程
??終於把該忙的事情都忙得差不多了,接下來又可以開始good good study,day day up了。在Android開發學習之路–基於vitamio的視頻播放器(一)中,主要講了播放器的界面的簡單實現,以及掃描視頻文件,獲取視頻文件的部分信息,還沒開始講解如何使用vitamio這個庫,這裡就開始講解下最簡單的使用方法吧。
??layout界面:
??io.vov.vitamio.widget.CenterLayout是vitamio提供的widget居中布局,然後io.vov.vitamio.widget.VideoView就是顯示的播放界面了,其實主要就是個surfaceview。接著看下activity代碼:
package com.jared.jplayer.ui; import android.content.Context; import android.content.Intent; import android.databinding.DataBindingUtil; import android.widget.Toast; import com.jared.jplayer.R; import com.jared.jplayer.app.BaseActivity; import com.jared.jplayer.common.MyMediaController; import com.jared.jplayer.databinding.LocalPlayerBinding; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.Vitamio; /** * Created by jared on 2016/9/29. */ public class LocalVideoPlayer extends BaseActivity { private String subtitle_path = ""; private long mPosition = 0; private LocalPlayerBinding binding; public static void launch(Context context, String url) { Intent intent = new Intent(context, LocalVideoPlayer.class); intent.putExtra("url", url); context.startActivity(intent); } @Override protected void initParams() { Vitamio.isInitialized(getActivity()); binding = DataBindingUtil.setContentView(getActivity(), R.layout.activity_local_player); } @Override protected void initViews() { super.initViews(); String url = getActivity().getIntent().getStringExtra("url"); initVideo("file://"+url); } @Override protected void onPause() { mPosition = binding.surfaceView.getCurrentPosition(); binding.surfaceView.stopPlayback(); super.onPause(); } @Override protected void onResume() { if (mPosition > 0) { binding.surfaceView.seekTo(mPosition); mPosition = 0; } super.onResume(); binding.surfaceView.start(); } private void initVideo(String path) { if (path == "") { // Tell the user to provide a media file URL/path. Toast.makeText(getActivity(), "Please edit VideoViewSubtitle Activity, and set path" + " variable to your media file URL/path", Toast.LENGTH_LONG).show(); return; } else { binding.surfaceView.setVideoPath(path); MyMediaController myMediaController = new MyMediaController(getActivity()); binding.surfaceView.setMediaController(myMediaController); binding.surfaceView.requestFocus(); binding.surfaceView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { // optional need Vitamio 4.0 mediaPlayer.setPlaybackSpeed(1.0f); binding.surfaceView.addTimedTextSource(subtitle_path); binding.surfaceView.setTimedTextShown(true); } }); binding.surfaceView.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() { @Override public void onTimedText(String text) { binding.subtitleView.setText(text); } @Override public void onTimedTextUpdate(byte[] pixels, int width, int height) { } }); } } }
??這裡看下initVideo代碼,binding.surfaceView.setVideoPath(path);設置播放的路徑,這裡的路徑是之前的播放列表中已經掃描出來的然後解析出來通過launch方法傳遞給LocalVideoPlayer的。這裡自定義了controller,然後通過controller就可以控制播放暫停等功能了,接著來看controller。
package com.jared.jplayer.common; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import com.jared.jplayer.R; import io.vov.vitamio.widget.MediaController; /** * Created by jared on 2016/9/28. */ public class MyMediaController extends MediaController { Context mContext; public MyMediaController(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; } public MyMediaController(Context context) { super(context); mContext = context; } @Override protected View makeControllerView() { return ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.mymediacontroller, this); //return super.makeControllerView(); } }
??繼承了MediaController,重新的布局了界面,接著看下新的布局:
??注意的是這裡的id的名字必須不能變,因為vitamio的mediacontroller會根據id來做對應的事情的。
??vitamio的接口還是比較簡潔的,省去了很多事情,需要考慮的事情基本上都做好了,它是基於ffmpeg做的,之後有機會也可以深入學習下。
在我們開發APP時不僅要在代碼實現上,做到對App的優化,而在我們的界面布局也有許多要優化的地方,如果布局寫的很low的話,系統加載布局的速度會十分的慢,使得用戶的體驗非
1.前言隨著項目的快速迭代,往往上一個版本正在測試中,下一個版本已經開始開發了和版本追溯了。目前移動客戶端還沒有版本管理控制上形成一套有效的管理體系,希望能通過此文檔的整
前面的文章已經講述了隨手拍項目圖像處理的技術部分,該篇文章主要是主界面的布局及屏幕滑動切換,並結合鴻洋大神的視頻和郭神的第一行代碼(強推兩人Android博客),完成了下
Android Volley 是Google開發的一個網絡lib,可以讓你更加簡單並且快速的訪問網絡數據。Volley庫的網絡請求都是異步的,你不必擔心異步處理問題。Vo