• Stars
    star
    285
  • Rank 145,115 (Top 3 %)
  • Language
    Java
  • Created almost 8 years ago
  • Updated almost 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

高仿今日头条ListView视频播放和优酷视频播放悬浮窗

开源地址:https://github.com/open-android/JieCaoVideoPlayer

简书:http://www.jianshu.com/p/618a5820261c

##主要特点

  1. 视频全屏播放和浮层小窗播放
  2. 可以完全自定义UI
  3. 能在ListViewViewPagerListViewViewPagerFragment等多重嵌套模式下全屏工作
  4. 手势修改进度和音量
  5. 视频大小的屏幕适配,宽或长至少有两个对边是充满屏幕的,另外两个方向居中
  6. 可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏
  7. 重力感应自动全屏
  8. WebView嵌套本地视频控件
  9. [支持https和rtsp]{https://developer.android.com/guide/topics/media/media-formats.html}
  10. 小于 100kb

##效果

jiecaovideoplayer-5.3.apk

  • 爱生活,爱学习,更爱做代码的搬运工,分类查找更方便请下载黑马助手app

黑马助手.png

使用步骤

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.添加权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

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监听如下生命周期方法

@Override
public void onBackPressed() {
    if (JCVideoPlayer.backPress()) {
        return;
    }
    super.onBackPressed();
}

@Override
protected void onResume() {
    super.onResume();
    Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected 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;
}

@Override
public int getCount() {
    return pager == -1 ? videoIndexs.length : 4;
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public 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

<fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard
    android:id="@+id/videoplayer"
    android:layout_width="match_parent"
    android:layout_height="200dp" />

8.在AndroidManifest.xml中

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:screenOrientation="portrait" /> <!-- or android:screenOrientation="landscape"-->

完成如上步骤就可以实现今日头条视频播放列表功能 , 更多功能请参考样例工程app

欢迎关注微信公众号

More Repositories

1

Android

GitHub上最火的Android开源项目,所有开源项目都有详细资料和配套视频
14,226
star
2

BridgeWebView

H5和Android通信框架,让H5和Android相互调用更加简单。
Java
325
star
3

Zxing

谷歌Zxing:快捷生成二维码、扫码、支持扫描本地相册中的二维码。
Java
307
star
4

FragmentTabhostUtils

Android底部导航封装
Java
213
star
5

RetrofitUtils

retrofit网络工具类
Java
200
star
6

ShoppingCartAddSubtract

一种漂亮的UI控件,能更灵活的控制数字的增减 , 类似商城购物车加减控件
Java
149
star
7

WheelPicker

Android滚轮选择控件 , 包含3D 效果, 滑动流畅无比
Java
117
star
8

Android1

android自定义控件
106
star
9

Timeline

一分钟实现横竖时间轴
Java
103
star
10

BaseRecyclerAndAdapter

BaseRecyclerAndAdapter
Java
86
star
11

RoundedImageView

一个轻而易举实现 图片圆形 / 圆角 / 椭圆 库
Java
67
star
12

LoopViewPager

Android LoopViewPager 轮播控件
Java
61
star
13

ViewPagerCards

一分钟实现ViewPager卡片
Java
60
star
14

Android-DivergeView2

仿美拍直播平台的点赞动画特效
Java
58
star
15

GuideDialog

一行代码实现引导界面对话框
Java
54
star
16

ViewPager

一分钟实现ViewPager横竖屏切换滑动
Java
53
star
17

PullToRefresh

下拉刷新和加载更多
Java
50
star
18

DragFooterView

一分钟实现向左拖拽跳转至更多页面的通用控件
Java
47
star
19

Glide-transformations

结合glide使用,实现很炫的图片展示效果框架
Java
41
star
20

ImageSelector

进入图库选择多张图片
Java
40
star
21

OkHttp3Utils

OkHttp3.0网络工具类
Java
37
star
22

DanmakuFlame

Android开源弹幕引擎 , 封装哔哩哔哩弹幕库
Java
36
star
23

PhotoImageView

一行代码实现图片手势缩放
Java
36
star
24

Android3

音视频播放
34
star
25

uCrop

一款非常贴心、炫酷的图片裁剪库
C++
33
star
26

CityPickerWebView

省市区三级联动
JavaScript
30
star
27

GreenDao3.2

Java
29
star
28

DynamicGridView

Java
27
star
29

SharedPreferencesUtils

Android SharedPreferences工具类。可以使用它简化对SharedPreferences数据的操作,同时它也支持链式调用,可以通过一行代码写入一条或多条数据。
Java
26
star
30

WilliamChart

WilliamChart项目使用,一行依赖,快捷开发。
Java
25
star
31

LeakCanaryDemo

内存泄漏检测工具,支持android studio eclipse
Java
25
star
32

RxjavaUtils

Rxjava工具类
Java
21
star
33

BabushkaText

一分钟实现TextView高亮显示
Java
18
star
34

CoolImageView

QQ首页动画特效
Java
17
star
35

Loading

一行代码实现加载对话框
Java
15
star
36

ShowcaseView

一分钟实现新手引导界面
Java
15
star
37

Picasso-transformations

结合Picasso使用,实现各种很炫的图片特效
Java
15
star
38

BottomBarDemo

BottomBar的一个简单的示例项目
Java
15
star
39

hellocharts-android

hellocharts-android项目使用,一行依赖,快捷开发。
Java
15
star
40

Android2

联网引擎
15
star
41

SystemBarTint

支持android 4.4版本修改状态栏颜色 & ActionBar一样颜色
Java
14
star
42

Logger

对orhanobut的logger项目封装并提交到仓库,一行依赖,方便使用。
Java
14
star
43

labelview

一分钟实现贴纸功能
Java
14
star
44

OrmLiteDemo

Java
10
star
45

IjkPlayer

Java
10
star
46

Picasso

Picasso图片加载框架
Java
10
star
47

MPAndroidChart

最火绘图项目MPAndroidChart的使用,一行依赖,快捷开发。
Java
10
star
48

MaterailDialog

一款超级漂亮的对话框 支持扩展 类似android5.0后的对话框
Java
9
star
49

Spotlight

一分钟实现引导界面
Java
9
star
50

Gson

google开源的gson
Java
9
star
51

GuideViewPager

Java
9
star
52

ExoPlayer

Java
8
star
53

Universal-Image-Loader

Universal-Image-Loader
Java
5
star
54

EmphasisTextView

一分钟实现TextView高亮显示
Java
4
star
55

TabLayout

1
star