1.Vitamio框架简介
Vitamio的中文名称为“维他蜜”。Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染。Vitamio 凭借其简洁易用的 API 接口赢得了全球众多开发者的青睐。到目前,全球已经有超过一万款应用在使用 Vitamio,覆盖用户超过 5亿。
下载地址:https://www.vitamio.org/Download/
2.如何使用
步骤二:将导入模块SDK和构建工具的版本改成我们自己工程的版本
3.给视频加上手势控制:双击暂停或播放、滑动改变音量和屏幕亮度
Vitamio的java代码+手势控制代码如下:
public class PlayActivity extends AppCompatActivity {
private VideoView videoView_play;
private MediaController controller = null;
//手势识别的类
private GestureDetector gestureDetector;
//屏幕尺寸大小为原始尺寸
private int mlayout = VideoView.VIDEO_LAYOUT_ZOOM;
//当前声音
private int mVolume = -1;
//最大声音
private int mMaxVolume;
//音频管理器
private AudioManager mAudioManager;
//当前亮度
private float mBrightness = -1f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Vitamio.isInitialized(this);
setContentView(R.layout.activity_play);
initView();
initData();
}
/**
* 初始化View
*/
private void initView() {
videoView_play = (VideoView) findViewById(R.id.videoView_play);
//实例化手势识别类
gestureDetector = new GestureDetector(this, new MyGestureDetector());
controller = new MediaController(this);
//初始化音频管理器
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//获取系统的最大声音
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
}
/**
* 初始化数据
*/
private void initData() {
//获取传递过来的uri
Intent intent = getIntent();
String uri = intent.getStringExtra("uri");
Log.i("uri", "--->>>" + uri);
//设置视频地址
videoView_play.setVideoURI(Uri.parse(uri));
//设置Controller,注意一定要是io.vov.vitamio.widget.MediaController
videoView_play.setMediaController(controller);
//给Controller设置VideoView
controller.setMediaPlayer(videoView_play);
//获得焦点
videoView_play.requestFocus();
//改变屏幕方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//VideoView.VIDEO_LAYOUT_ZOOM表示播放为视屏画面原始大小,第二个参数表示设置视频的宽高比,0表示自动检测
//videoView_play.setVideoLayout(VideoView.VIDEO_LAYOUT_ZOOM, 0);
//开始播放
videoView_play.start();
}
/**
* 处理手势事件
*
* @param event
* @return
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
//判断我们的手势识别类是否进行了识别操作
if (gestureDetector.onTouchEvent(event)) {
return true;
}
mVolume = -1;
mBrightness = -1f;
return super.onTouchEvent(event);
}
/**
* 识别手势操作的内部类
*/
public class MyGestureDetector extends GestureDetector.SimpleOnGestureListener {
//双击屏幕的方法
@Override
public boolean onDoubleTap(MotionEvent e) {
//判断媒体是否在播放状体,是:true,否:false
if (videoView_play.isPlaying()) {
//暂停播放
//Log.i("pause", "--->>>" + "暂停了");
videoView_play.pause();
} else {
//sLog.i("start", "--->>>" + "播放了");
videoView_play.start();
}
//一定要return true
return true;
}
//滑动
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
//获取坐标点
float mOldX = e1.getX(), mOldY = e1.getY();
int y = (int) e2.getRawY();
//窗口管理器
Display disp = getWindowManager().getDefaultDisplay();
//获得屏幕宽高
int windowWidth = disp.getWidth();
int windowHeight = disp.getHeight();
//经过计算判断是否滑动的是右边
if (mOldX > windowWidth * 4.0 / 5) {
//将滑动距离带进调节音量的方法中
onVolumeSlide((mOldY - y) / windowWidth);
//经过计算判断是否滑动的是左边
} else if (mOldX < windowWidth / 5) {
//将滑动距离带进调节亮度的方法中
onBrightnessSlide((mOldY - y) / windowHeight);
}
return super.onScroll(e1, e2, distanceX, distanceY);
}
}
///////////////////////////////////////////////////////////////////////////
// 改变音量和屏幕亮度的方法
///////////////////////////////////////////////////////////////////////////
/**
* 改变音量
*
* @param percent
*/
private void onVolumeSlide(float percent) {
//判断当前音量是否是-1,是则没有获取当前系统音量
if (mVolume == -1) {
//获得系统当前音量
mVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
//判断当前音量是否为负数,是则设置最小为0
if (mVolume < 0) {
//如果当前音量小于0则给变量赋最小的值0
mVolume = 0;
}
}
//计算用户滑动的距离
int index = (int) ((percent * mMaxVolume) + mVolume);
//判断该距离是否大于最大音量值,是则把给变量赋值为最大值,否则最小值
if (index > mMaxVolume) {
index = mMaxVolume;
} else if (index < 0) {
index = 0;
}
//设置音量
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0);
}
/**
* 滑动改变亮度
*
* @param percent
*/
private void onBrightnessSlide(float percent) {
if (mBrightness < 0) {
//获得屏幕亮度
mBrightness = getWindow().getAttributes().screenBrightness;
//判断当前亮度是否小于0.01f,是的话则给变量赋值0.01f放置屏幕变黑
if (mBrightness <= 0.01f)
mBrightness = 0.01f;
}
/**WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;
它继承于 ViewGroup.LayoutParams; 它用于向WindowManager描述Window的管理策略。**/
//获取window窗口属性
WindowManager.LayoutParams lpa = getWindow().getAttributes();
//将当前屏幕亮度加上我们移动的距离的值赋给lpa(窗口管理)
lpa.screenBrightness = mBrightness + percent;
//判断当前亮度是否大于1,是则设置为1,(亮度最大只能是1)
if (lpa.screenBrightness > 1.0f)
lpa.screenBrightness = 1.0f;
//判断是否小于0.01,防止黑屏最小设置成0.01
else if (lpa.screenBrightness < 0.01f)
lpa.screenBrightness = 0.01f;
//让设置好的亮度生效
getWindow().setAttributes(lpa);
}
}