能在ListView、ViewPager和ListView、ViewPager和Fragment等多重嵌套模式下全屏工作
手势修改进度和音量
视频大小的屏幕适配,宽或长至少有两个对边是充满屏幕的,另外两个方向居中
可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏
重力感应自动全屏
WebView嵌套本地视频控件
小于 100kb
1. 在project的build.gradle添加如下代码(如下图)allprojects {
repositories {
maven { url "https://jitpack.io" }
2. 在Module的build.gradle添加依赖compile 'com.github.open-android:JieCaoVideoPlayer:0.1.0'
3.添加权限
4.在Activity中添加如下代码listView = (ListView) findViewById(R.id.listview);
adapterVideoList = new VideoListAdapter(this);
listView.setAdapter(adapterVideoList);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorEventListener = new JCVideoPlayer.JCAutoFullscreenListener();
5.在Activity监听如下生命周期方法@Overridepublic void onBackPressed() { if (JCVideoPlayer.backPress()) { return;
} super.onBackPressed();
}@Overrideprotected void onResume() { super.onResume();
Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);
}@Overrideprotected void onPause() { super.onPause();
sensorManager.unregisterListener(sensorEventListener);
JCVideoPlayer.releaseAllVideos();
6.新建一个Adapter继承BaseAdapter并且复制如下代码public static final String TAG = "JieCaoVideoPlayer";int[] videoIndexs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Context context;int pager = -1;public VideoListAdapter(Context context) { this.context = context;
}public VideoListAdapter(Context context, int pager) { this.context = context; this.pager = pager;
}@Overridepublic int getCount() { return pager == -1 ? videoIndexs.length : 4;
}@Overridepublic Object getItem(int position) { return null;
}@Overridepublic long getItemId(int position) { return position;
}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder; if (null == convertView) {
viewHolder = new ViewHolder();
LayoutInflater mInflater = LayoutInflater.from(context);
convertView = mInflater.inflate(R.layout.item_videoview, null);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.jcVideoPlayer = (JCVideoPlayerStandard) convertView.findViewById(R.id.videoplayer); if (pager == -1) {
viewHolder.jcVideoPlayer.setUp(
VideoConstant.videoUrls[0][position], JCVideoPlayer.SCREEN_LAYOUT_LIST,
VideoConstant.videoTitles[0][position]);
System.out.println("fdsfdsfdsfdsfa setup " + position);
Picasso.with(convertView.getContext())
.load(VideoConstant.videoThumbs[0][position])
.into(viewHolder.jcVideoPlayer.thumbImageView);
} else {
viewHolder.jcVideoPlayer.setUp(
VideoConstant.videoUrls[pager][position], JCVideoPlayer.SCREEN_LAYOUT_LIST,
VideoConstant.videoTitles[pager][position]);
Picasso.with(convertView.getContext())
.load(VideoConstant.videoThumbs[pager][position])
.into(viewHolder.jcVideoPlayer.thumbImageView);
} return convertView;
}class ViewHolder {
JCVideoPlayerStandard jcVideoPlayer;
7.添加Adapter的item布局R.layout.item_videoview
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="200dp" />
8.在AndroidManifest.xml中
android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait" /> 完成如上步骤就可以实现今日头条视频播放列表功能 , 更多功能请参考样例工程app
作者:马伟奇
链接:https://www.jianshu.com/p/618a5820261c
主要特点视频全屏播放和浮层小窗播放可以完全自定义UI能在ListView、ViewPager和ListView、ViewPager和Fragment等多重嵌套模式下全屏工作手势修改进度和音量视频大小的屏幕适配,宽或长至少有两个对边是充满屏幕的,另外两个方向居中可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏重力感应自动全屏WebView嵌套本地视频控件小于 100kb使用步骤1. 在pro...
Android
仿
今日
头条
详情页实现
github
源码地址
最近项目有个需求,需要实现一个和
今日
头条
新闻详情页一样的体验。上部分是webview来展示新闻内容,下半部分是listview来展示评论区,可无限加载更多。
起初的实现思路是 将webview放置在listview头部,看似没有什么问题,实现之后发现...
Android
最近的项目中有个需求就是,
自定义
本地
视频
列表
,于是乎在网上找了很多的方法,但是没有一个是能快速获取相册中
视频
列表
的方式。于是写了个通过(查询系统数据库的方式)在listview显示
视频
缩略图和
视频
大小时间,名称,时长的demo供大家参考下,让大家少走些弯路
本地
视频
列表
,显相册中的
视频
列表
,
自定义
本地
视频
列表
类似
头条
,网易App
列表
当中播放
视频
以及实现全屏,
列表
当中嵌套
视频
播放,滑出可视区域停止播放,点击全屏播放,主要利用textureview+mediaplay实现关键
功能
。修改了相关bug,可直接使用(之前的资源删除不了)。
------资源很老了(怎么删除?),别再浪费分了,给大家推荐一个https://
github
.com/lipangit/JiaoZiVideoPlayer
1.监听滚动事件
首先要给listview添加setOnScrollListener监听,注意这个监听在recyclerView上是addOnScrollListener,也就是说下面代码同时支持recyclerView。
监听里会有两个方法,我们用onScroll方法记录 当前第一个可见Item
这个问题有些难度,因为关于什么是“最好的”
开源项目
是主观的。不过,我可以列出一些比较受欢迎和有影响力的 Java
开源项目
供你参考:
1. Spring Framework:这是一个用于构建应用程序的框架,提供了很多有用的
功能
,如依赖注入,声明式事务管理等。
2. Apache Commons:这是一个包含许多 Java 常用组件的
开源项目
,包括文件操作、字符串处理、集合操作等。
3. Hibernate:这是一个对象-关系映射(ORM)框架,可以帮助你将数据库中的数据映射到 Java 对象,使得数据操作更加方便。
4. Google Guava:这是谷歌的一个
开源项目
,包含了许多有用的 Java 工具类和函数。
5. JUnit:这是一个单元测试框架,可以帮助你编写和运行代码测试。
这些项目都在
GitHub
上有托管,你可以去看看。