在Android开发中,有些技术人员可能对于JieCaoVideoPlayer功能不知道如何使用,那么接下来郑州app开发公司燚轩科技就来跟大家分析一下该功能的使用方法吧。
compile 'fm.jiecao:jiecaovideoplayer:5.5'
<activity android:name=".JieCaoVideoActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait"></activity>
这种方法小屏切换到大屏是创建了两个播放器,或者说是创建了两个TextureView的容器,从小到大的时候在Activity中创建了一个全屏的播放器容器,并把当前的视频渲染器(TextureView)和监听器都给赋值过去了,由于使用了TextureView,所以在滚动控件中使用也不会用果冻效果,可以说是正真意义的完美的播放器全屏方案。大小切换由于TextureView的容器换了,所以中间会有很短时间的黑屏,但是可以忽略
/**
* 小屏窗口切换为全屏播放
*/
public void startWindowFullscreen() {
Log.i(TAG, "startWindowFullscreen " + " [" + this.hashCode() + "] ");
hideSupportActionBar(getContext());
/**activity的content layout**/
ViewGroup vp = (ViewGroup) (JCUtils.scanForActivity(getContext())).findViewById(Window.ID_ANDROID_CONTENT);
/**通过id找到播放器自己本身**/
View old = vp.findViewById(FULLSCREEN_ID);
/**如果在设置全屏之前activity的content layout中本来就存在播放器就先移除**/
if (old != null) {
vp.removeView(old);
}
if (textureViewContainer.getChildCount() > 0) {
textureViewContainer.removeAllViews();
}
try {
Constructor constructor = (Constructor) JCVideoPlayer.this.getClass().getConstructor(Context.class);
JCVideoPlayer jcVideoPlayer = constructor.newInstance(getContext());
jcVideoPlayer.setId(FULLSCREEN_ID);
/**获取屏幕的宽高**/
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
int w = wm.getDefaultDisplay().getWidth();
int h = wm.getDefaultDisplay().getHeight();
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(h, w);
lp.setMargins((w - h) / 2, -(w - h) / 2, 0, 0);
vp.addView(jcVideoPlayer, lp);
jcVideoPlayer.setUp(url, JCVideoPlayerStandard.SCREEN_WINDOW_FULLSCREEN, objects);
jcVideoPlayer.setUiWitStateAndScreen(currentState);
/**小窗口和全屏的切换是创建了两个播放器,之间的衔接全靠这个方法**/
jcVideoPlayer.addTextureView();
jcVideoPlayer.setRotation(90);
final Animation ra = AnimationUtils.loadAnimation(getContext(), R.anim.start_fullscreen);
jcVideoPlayer.setAnimation(ra);
/**监听器的替换**/
JCVideoPlayerManager.setLastListener(this);
JCVideoPlayerManager.setListener(jcVideoPlayer);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
参照JCVideoPlayerSimple,JCVideoPlayerStandard,JCVideoPlayerStandardWithShareButton
继承JCVideoPlayer,JCVideoPlayer中包含所有关于播放的代码,不包含任何UI的代码
getLayoutId();布局的id
Override init(Context context);这里初始化自定义控件
Override setStateAndUi(int state);是重点,自定义各个状态的UI,如果在其他地方修改UI应该保持谨慎
Override onTouch(),onClick();如果有需要
在自定义UI之后,应该依然按照README.md中的4步骤来调用播放器
关于控件id的问题,在Base simple ui example中的所有最基础的id是写死在JCVideoPlayer中的,下面的控件id已经findViewById过了不需要再findViewById
控件 id
开始按钮 start
全屏按钮 fullscreen
进度条 progress
总共时间 total
下方layout layout_bottom
上方layout layout_top
SurfaceView的容器 surface_container
如果想快速的集成视频播放功能,建议参照JCVideoPlayerStandardWithShareButton来做,它继承JCVideoPlayerStandard,JCVideoPlayerStandard的目标是和今日头条的细节保持一致
如果想完全自定义UI,参照JCVideoPlayerStandard,如果还是存在有些疑惑的话,可以咨询郑州app开发公司燚轩科技。