Android 节操视频播放器jiecaovideoplayer使用

特点:

  1. 全屏时启动新Activity实现播放器真正的全屏功能
  2. 能在ListViewViewPagerListViewViewPagerFragment等多重嵌套模式下全屏工作
  3. ListView的拖拽和ViewPager的滑动时如果划出屏幕会自动重置视频
  4. 视频大小的屏幕适配,宽或长至少有两个对边是充满屏幕的,另外两个方向居中
  5. 可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏
  6. 根据自己应用的颜色风格换肤
  7. 播放MP3时显示缩略图片
  8. 占用空间非常小,不到50k

使用步骤:

1.添加依赖:

compile 'fm.jiecao:jiecaovideoplayer:5.5.2'
glide依赖:
compile 'com.github.bumptech.glide:glide:3.7.0'
2.添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
3.最后在AndroidManifest.xml要进行相对应的配置
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait" />
<!-- or android:screenOrientation="landscape"-->
4.布局文件:
<fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="200dp"/>

5.mainActivity文件:

public class MainActivity extends AppCompatActivity {@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);JCVideoPlayerStandard jcVideoPlayerStandard = (JCVideoPlayerStandard) findViewById(R.id.videoplayer);jcVideoPlayerStandard.setUp("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4\", JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL", JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, "嫂子闭眼睛");// jcVideoPlayerStandard.thumbImageView.setImage("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640");
        Glide.with(this).load("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1512110035&di=43af12f288d95526943eab387ad3680a&imgtype=jpg&er=1&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2Fce0bfeccf93649e3f279a9fc26a203eb70ca6d4d.jpg").into(jcVideoPlayerStandard.thumbImageView);

6.在包含播放器的Fragment或Activity的onPause()方法中调用JCVideoPlayer.releaseAllVideos()。
相对应的生命周期里面要做相对应的操作:
@Override
public void onBackPressed() {if (JCVideoPlayer.backPress()) {return;}super.onBackPressed();
}
@Override
protected void onPause() {super.onPause();JCVideoPlayer.releaseAllVideos();
}

到这就结束了。
------------------------------------------------------------------------------
相关代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {JCVideoPlayerStandard mJcVideoPlayerStandard;Button mTinyWindow, mAutoTinyWindow, mAboutListView, mPlayDirectly, mAboutApi, mAboutWebView,play_music;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTinyWindow = (Button) findViewById(R.id.tiny_window);mAutoTinyWindow = (Button) findViewById(R.id.auto_tiny_window);mPlayDirectly = (Button) findViewById(R.id.play_directly_without_layout);mAboutListView = (Button) findViewById(R.id.about_listview);mAboutApi = (Button) findViewById(R.id.about_api);play_music = (Button) findViewById(R.id.play_music);mAboutWebView = (Button) findViewById(R.id.about_webview);mTinyWindow.setOnClickListener(this);mAutoTinyWindow.setOnClickListener(this);mAboutListView.setOnClickListener(this);mPlayDirectly.setOnClickListener(this);mAboutApi.setOnClickListener(this);mAboutWebView.setOnClickListener(this);play_music.setOnClickListener(this);mJcVideoPlayerStandard = (JCVideoPlayerStandard) findViewById(R.id.jc_video);mJcVideoPlayerStandard.setUp("http://www.jmzsjy.com/UploadFile/微课/地方风味小吃——宫廷香酥牛肉饼.mp4", JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, "视频播放");Picasso.with(this).load("http://img4.jiecaojingxuan.com/2016/11/23/00b026e7-b830-4994-bc87-38f4033806a6.jpg@!640_360").into(mJcVideoPlayerStandard.thumbImageView);JCVideoPlayer.setJcUserAction(new MyUserActionStandard());}@Overrideprotected void onPause() {super.onPause();JCVideoPlayer.releaseAllVideos();}@Overridepublic void onBackPressed() {if (JCVideoPlayer.backPress()) {return;}super.onBackPressed();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tiny_window:mJcVideoPlayerStandard.startWindowTiny();break;case R.id.auto_tiny_window:startActivity(new Intent(MainActivity.this, AutoTinyActivity.class));break;case R.id.play_directly_without_layout:startActivity(new Intent(MainActivity.this, PlayDirectlyActivity.class));break;case R.id.about_listview:startActivity(new Intent(MainActivity.this, ListViewActivity.class));break;case R.id.about_api:startActivity(new Intent(MainActivity.this, ApiActivity.class));break;case R.id.about_webview:startActivity(new Intent(MainActivity.this, WebViewActivity.class));break;case R.id.play_music:startActivity(new Intent(MainActivity.this, PlayMusicActivity.class));break;}}    class MyUserActionStandard implements JCUserActionStandard {@Overridepublic void onEvent(int type, String url, int screen, Object... objects) {switch (type) {case JCUserAction.ON_CLICK_START_ICON:Log.i("USER_EVENT", "ON_CLICK_START_ICON" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_CLICK_START_ERROR:Log.i("USER_EVENT", "ON_CLICK_START_ERROR" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_CLICK_START_AUTO_COMPLETE:Log.i("USER_EVENT", "ON_CLICK_START_AUTO_COMPLETE" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_CLICK_PAUSE:Log.i("USER_EVENT", "ON_CLICK_PAUSE" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_CLICK_RESUME:Log.i("USER_EVENT", "ON_CLICK_RESUME" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_SEEK_POSITION:Log.i("USER_EVENT", "ON_SEEK_POSITION" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_AUTO_COMPLETE:Log.i("USER_EVENT", "ON_AUTO_COMPLETE" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_ENTER_FULLSCREEN:Log.i("USER_EVENT", "ON_ENTER_FULLSCREEN" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_QUIT_FULLSCREEN:Log.i("USER_EVENT", "ON_QUIT_FULLSCREEN" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_ENTER_TINYSCREEN:Log.i("USER_EVENT", "ON_ENTER_TINYSCREEN" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_QUIT_TINYSCREEN:Log.i("USER_EVENT", "ON_QUIT_TINYSCREEN" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_TOUCH_SCREEN_SEEK_VOLUME:Log.i("USER_EVENT", "ON_TOUCH_SCREEN_SEEK_VOLUME" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserAction.ON_TOUCH_SCREEN_SEEK_POSITION:Log.i("USER_EVENT", "ON_TOUCH_SCREEN_SEEK_POSITION" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserActionStandard.ON_CLICK_START_THUMB:Log.i("USER_EVENT", "ON_CLICK_START_THUMB" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;case JCUserActionStandard.ON_CLICK_BLANK:Log.i("USER_EVENT", "ON_CLICK_BLANK" + " title is : " + (objects.length == 0 ? "" : objects[0]) + " url is : " + url + " screen is : " + screen);break;default:Log.i("USER_EVENT", "unknow");break;}}}}

相关布局 activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandardandroid:id="@+id/jc_video"android:layout_width="300dp"android:layout_height="300dp" />
</LinearLayout>

												

Android 节操视频播放器jiecaovideoplayer使用相关推荐

  1. Android 节操视频播放器jiecaovideoplayer自定义播放音频使用:屏蔽全屏按钮,增加倒计时,当前时间/总时间

    一.屏蔽全屏按钮 找到JCVideoPlayerStandard.java文件中的代码: private void fixAudio() {if (SrcType.equalsIgnoreCase(& ...

  2. android 音乐视频播放器(github上十二款最著名的Android播放器开源项目)

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

  3. 实现在Android本地视频播放器开发

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

  4. Android本地视频播放器开发--视频解码

    在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...

  5. 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc

    基于Android的视频播放器的设计与实现- 基于Android的视频播放器的设计与实现 中 文 摘 要 如今,随着基于Android的智能手机的,.因此,设计一个基于android手机的多功能播放器 ...

  6. android 编译 sdl,SDL编译 - Android本地视频播放器开发_Linux编程_Linux公社-Linux系统门户网站...

    在上一章  Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)[http://www.linuxidc.com/Linux/2013-06/85955p5.htm]中使用Ope ...

  7. Android 全景视频播放器(VR视频播放器探索二)

        上次随便写着玩的  http://blog.csdn.net/ai_yong_jie/article/details/51159367   Android 全景视频播放器(VR视频播放器探索一 ...

  8. Android自定义视频播放器(三)

    参看:Android自定义视频播放器(一):https://blog.csdn.net/zxd1435513775/article/details/81507909 参看:Android自定义视频播放 ...

  9. Android本地视频播放器开发--NDK编译FFmpeg

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

最新文章

  1. 译者招募 | 《Java编程思想》作者Bruce Eckel新作On Java 8
  2. Spring Boot 参考指南(运行你的应用程序)
  3. Wirshark 显示过滤器
  4. 双目立体放大!谷歌刚刚开源的这篇论文可能会成为手机双摄的新玩法
  5. 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python基础简介及入门配置
  6. Xcode中C、C++、Object-C3种语言的混编
  7. java arraylist_死磕 java集合之ArrayList源码分析
  8. [转载] Python导出Excel图表
  9. oracle ebs采购申请接口表,Oracle EBS BOM接口表操作.doc
  10. 【MicroPython ESP32】ssd1306 0.96“OLED+网络时钟
  11. Web安全——同源策略理解
  12. 红色警戒2修改器原理百科(六)
  13. 云原生不可变基础设施
  14. 线性回归--公式推导
  15. 1688商品详情api接口
  16. 产业分析:光伏产业发展路线图
  17. 数据挖掘(python实现)—认识数据
  18. TP5.1实现支付宝线下收银(扫码枪扫描用户支付宝付款码支付)
  19. 平面设计新手怎么构思设计?有什么技巧!
  20. 2020年深圳杯C题

热门文章

  1. 算法.动态规划 导航/数塔取数字问题
  2. 会员测试环境治理之路
  3. Eclipse Neon EGit Integration gives Exception 401 Authorization Required
  4. java单例模式(下)
  5. 利用BSCScan获取账户交易记录
  6. mysql按天执行分区表sql_Mysql按天自动表分区教程
  7. 为什么要做小程序?90%的商家不知道的好处!
  8. Dynamic Head: Unifying Object Detection Heads with Attentions 阅读
  9. 二叉树层次遍历(借助队列实现)
  10. 获取html元素的高,获取HTML元素的高度jQuery