提交 33b26bdf 编写于 作者: G guoshuyu

update demo

上级 5514f4f8
......@@ -88,6 +88,7 @@ compile 'com.shuyu:gsyVideoPlayer-ex_so:5.0.0-beta'
文档 | 传送门
-------- | ---
**使用说明**|***[--- 简单使用,快速上手文档](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/USE.md)***
**项目解析说明**|***[--- 项目解析说明、包含项目架构和解析](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/GSYVIDEO_PLAYER_PROJECT_INFO.md)***
接口文档入口|**[--- 使用说明、接口文档 - 入口](https://github.com/CarGuo/GSYVideoPlayer/wiki)**
**问题集锦入口**|***[--- 问题集锦 - 入口(大部分你遇到的问题都在这里解决) ](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/QUESTION.md)***
......
......@@ -130,24 +130,54 @@
android:name=".ListMultiVideoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent" />
android:theme="@style/Theme.AppCompat.Translucent" />
<activity
android:name=".ListADVideoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent" />
android:theme="@style/Theme.AppCompat.Translucent" />
<activity
android:name=".exo.DetailExoListPlayer"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name=".simple.SimplePlayer"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@style/Theme.AppCompat.Full"
android:screenOrientation="portrait" />
<activity
android:name=".simple.SimpleDetailActivityMode1"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name=".simple.SimpleDetailActivityMode2"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name=".simple.SimpleListVideoActivityMode1"
android:theme="@style/Theme.AppCompat.Translucent"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name=".simple.SimpleListVideoActivityMode2"
android:theme="@style/Theme.AppCompat.Translucent"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name=".simple.SimpleActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<meta-data
android:name="android.max_aspect"
android:value="2.1" />
</application>
</manifest>
\ No newline at end of file
package com.example.gsyvideoplayer;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
......@@ -9,6 +10,7 @@ import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.gsyvideoplayer.simple.SimpleActivity;
import com.example.gsyvideoplayer.utils.JumpUtils;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.utils.Debuger;
......@@ -53,9 +55,13 @@ public class MainActivity extends AppCompatActivity {
@OnClick({R.id.open_btn, R.id.list_btn, R.id.list_btn_2, R.id.list_detail, R.id.clear_cache, R.id.recycler, R.id.recycler_2, R.id.list_detail_list, R.id.web_detail, R.id.danmaku_video, R.id.fragment_video,
R.id.more_type, R.id.input_type, R.id.open_btn_empty, R.id.open_control, R.id.open_filter, R.id.open_btn_pick, R.id.open_btn_auto, R.id.open_scroll, R.id.open_window, R.id.open_btn_ad,
R.id.open_btn_multi, R.id.open_btn_ad2, R.id.open_list_ad, R.id.open_custom_exo})
R.id.open_btn_multi, R.id.open_btn_ad2, R.id.open_list_ad, R.id.open_custom_exo, R.id.open_simple})
public void onClick(View view) {
switch (view.getId()) {
case R.id.open_simple:
//简单的播放
startActivity(new Intent(this, SimpleActivity.class));
break;
case R.id.open_btn:
//直接一个页面播放的
JumpUtils.goToVideoPlayer(this, openBtn);
......
package com.example.gsyvideoplayer.simple;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.utils.JumpUtils;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.utils.Debuger;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import permissions.dispatcher.PermissionUtils;
public class SimpleActivity extends AppCompatActivity {
final String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple);
ButterKnife.bind(this);
boolean hadPermission = PermissionUtils.hasSelfPermissions(this, permissions);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !hadPermission) {
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permissions, 1110);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean sdPermissionResult = PermissionUtils.verifyPermissions(grantResults);
if (!sdPermissionResult) {
Toast.makeText(this, "没获取到sd卡权限,无法播放本地视频哦", Toast.LENGTH_LONG).show();
}
}
@OnClick({R.id.simple_list_1, R.id.simple_list_2, R.id.simple_detail_1, R.id.simple_detail_2, R.id.simple_player})
public void onClick(View view) {
switch (view.getId()) {
case R.id.simple_player:
startActivity(new Intent(this, SimplePlayer.class));
break;
case R.id.simple_list_1:
startActivity(new Intent(this, SimpleListVideoActivityMode1.class));
break;
case R.id.simple_list_2:
startActivity(new Intent(this, SimpleListVideoActivityMode2.class));
break;
case R.id.simple_detail_1:
startActivity(new Intent(this, SimpleDetailActivityMode1.class));
break;
case R.id.simple_detail_2:
startActivity(new Intent(this, SimpleDetailActivityMode2.class));
break;
}
}
}
package com.example.gsyvideoplayer.simple;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.example.gsyvideoplayer.R;
import com.shuyu.gsyvideoplayer.GSYBaseActivityDetail;
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
/**
* 简单详情实现模式1
*/
public class SimpleDetailActivityMode1 extends GSYBaseActivityDetail<StandardGSYVideoPlayer> {
StandardGSYVideoPlayer detailPlayer;
private String url = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_detail_player);
detailPlayer = (StandardGSYVideoPlayer) findViewById(R.id.detail_player);
//增加title
detailPlayer.getTitleTextView().setVisibility(View.GONE);
detailPlayer.getBackButton().setVisibility(View.GONE);
initVideoBuilderMode();
}
@Override
public StandardGSYVideoPlayer getGSYVideoPlayer() {
return detailPlayer;
}
@Override
public GSYVideoOptionBuilder getGSYVideoOptionBuilder() {
//内置封面可参考SampleCoverVideo
ImageView imageView = new ImageView(this);
loadCover(imageView, url);
return new GSYVideoOptionBuilder()
.setThumbImageView(imageView)
.setUrl(url)
.setCacheWithPlay(true)
.setVideoTitle(" ")
.setIsTouchWiget(true)
.setRotateViewAuto(false)
.setLockLand(false)
.setShowFullAnimation(false)//打开动画
.setNeedLockFull(true)
.setSeekRatio(1);
}
@Override
public void clickForFullScreen() {
}
/**
* 是否启动旋转横屏,true表示启动
*/
@Override
public boolean getDetailOrientationRotateAuto() {
return true;
}
private void loadCover(ImageView imageView, String url) {
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageResource(R.mipmap.xxx1);
Glide.with(this.getApplicationContext())
.setDefaultRequestOptions(
new RequestOptions()
.frame(3000000)
.centerCrop()
.error(R.mipmap.xxx2)
.placeholder(R.mipmap.xxx1))
.load(url)
.into(imageView);
}
}
package com.example.gsyvideoplayer.simple;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import com.example.gsyvideoplayer.R;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack;
import com.shuyu.gsyvideoplayer.listener.LockClickListener;
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
/**
* 简单详情实现模式2
*/
public class SimpleDetailActivityMode2 extends AppCompatActivity {
StandardGSYVideoPlayer detailPlayer;
private boolean isPlay;
private boolean isPause;
private OrientationUtils orientationUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_detail_player);
detailPlayer = (StandardGSYVideoPlayer) findViewById(R.id.detail_player);
String url = "http://7xse1z.com1.z0.glb.clouddn.com/1491813192";
//增加封面
ImageView imageView = new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageResource(R.mipmap.xxx1);
//增加title
detailPlayer.getTitleTextView().setVisibility(View.GONE);
detailPlayer.getBackButton().setVisibility(View.GONE);
//外部辅助的旋转,帮助全屏
orientationUtils = new OrientationUtils(this, detailPlayer);
//初始化不打开外部的旋转
orientationUtils.setEnable(false);
GSYVideoOptionBuilder gsyVideoOption = new GSYVideoOptionBuilder();
gsyVideoOption.setThumbImageView(imageView)
.setIsTouchWiget(true)
.setRotateViewAuto(false)
.setLockLand(false)
.setAutoFullWithSize(true)
.setShowFullAnimation(false)
.setNeedLockFull(true)
.setUrl(url)
.setCacheWithPlay(false)
.setVideoTitle("测试视频")
.setVideoAllCallBack(new GSYSampleCallBack() {
@Override
public void onPrepared(String url, Object... objects) {
super.onPrepared(url, objects);
//开始播放了才能旋转和全屏
orientationUtils.setEnable(true);
isPlay = true;
}
@Override
public void onQuitFullscreen(String url, Object... objects) {
super.onQuitFullscreen(url, objects);
if (orientationUtils != null) {
orientationUtils.backToProtVideo();
}
}
}).setLockClickListener(new LockClickListener() {
@Override
public void onClick(View view, boolean lock) {
if (orientationUtils != null) {
//配合下方的onConfigurationChanged
orientationUtils.setEnable(!lock);
}
}
}).build(detailPlayer);
detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//直接横屏
orientationUtils.resolveByClick();
//第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar
detailPlayer.startWindowFullscreen(SimpleDetailActivityMode2.this, true, true);
}
});
}
@Override
public void onBackPressed() {
if (orientationUtils != null) {
orientationUtils.backToProtVideo();
}
if (GSYVideoManager.backFromWindowFull(this)) {
return;
}
super.onBackPressed();
}
@Override
protected void onPause() {
detailPlayer.getCurrentPlayer().onVideoPause();
super.onPause();
isPause = true;
}
@Override
protected void onResume() {
detailPlayer.getCurrentPlayer().onVideoResume(false);
super.onResume();
isPause = false;
}
@Override
protected void onDestroy() {
super.onDestroy();
if (isPlay) {
detailPlayer.getCurrentPlayer().release();
}
if (orientationUtils != null)
orientationUtils.releaseListener();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//如果旋转了就全屏
if (isPlay && !isPause) {
detailPlayer.onConfigurationChanged(this, newConfig, orientationUtils, true, true);
}
}
}
package com.example.gsyvideoplayer.simple;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.AbsListView;
import android.widget.ListView;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.simple.adapter.SimpleListVideoModel1Adapter;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
/**
* 简单列表实现模式1
*/
public class SimpleListVideoActivityMode1 extends AppCompatActivity {
ListView videoList;
SimpleListVideoModel1Adapter listNormalAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_video);
videoList = (ListView)findViewById(R.id.video_list);
listNormalAdapter = new SimpleListVideoModel1Adapter(this);
videoList.setAdapter(listNormalAdapter);
videoList.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int lastVisibleItem = firstVisibleItem + visibleItemCount;
//大于0说明有播放
if (GSYVideoManager.instance().getPlayPosition() >= 0) {
//当前播放的位置
int position = GSYVideoManager.instance().getPlayPosition();
//对应的播放列表TAG
if (GSYVideoManager.instance().getPlayTag().equals(SimpleListVideoModel1Adapter.TAG)
&& (position < firstVisibleItem || position > lastVisibleItem)) {
if(GSYVideoManager.isFullState(SimpleListVideoActivityMode1.this)) {
return;
}
//如果滑出去了上面和下面就是否,和今日头条一样
GSYVideoManager.releaseAllVideos();
listNormalAdapter.notifyDataSetChanged();
}
}
}
});
}
@Override
public void onBackPressed() {
if (GSYVideoManager.backFromWindowFull(this)) {
return;
}
super.onBackPressed();
}
@Override
protected void onPause() {
super.onPause();
GSYVideoManager.onPause();
}
@Override
protected void onResume() {
super.onResume();
GSYVideoManager.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
GSYVideoManager.releaseAllVideos();
}
}
package com.example.gsyvideoplayer.simple;
import android.graphics.Point;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.simple.adapter.SimpleListVideoModel2Adapter;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack;
import com.shuyu.gsyvideoplayer.utils.CommonUtil;
import com.shuyu.gsyvideoplayer.utils.GSYVideoHelper;
/**
* 简单列表实现模式2
*/
public class SimpleListVideoActivityMode2 extends AppCompatActivity {
ListView videoList;
RelativeLayout activityListVideo;
GSYVideoHelper smallVideoHelper;
SimpleListVideoModel2Adapter listVideoAdapter;
GSYVideoHelper.GSYVideoHelperBuilder gsySmallVideoHelperBuilder;
int lastVisibleItem;
int firstVisibleItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_video2);
videoList = (ListView)findViewById(R.id.video_list) ;
activityListVideo = (RelativeLayout)findViewById(R.id.activity_list_video) ;
//创建小窗口帮助类
smallVideoHelper = new GSYVideoHelper(this);
//配置
gsySmallVideoHelperBuilder = new GSYVideoHelper.GSYVideoHelperBuilder();
gsySmallVideoHelperBuilder
.setHideStatusBar(true)
.setNeedLockFull(true)
.setCacheWithPlay(true)
.setShowFullAnimation(false)
.setRotateViewAuto(false)
.setLockLand(true)
.setVideoAllCallBack(new GSYSampleCallBack(){
@Override
public void onQuitSmallWidget(String url, Object... objects) {
super.onQuitSmallWidget(url, objects);
//大于0说明有播放,//对应的播放列表TAG
if (smallVideoHelper.getPlayPosition() >= 0 && smallVideoHelper.getPlayTAG().equals(SimpleListVideoModel2Adapter.TAG)) {
//当前播放的位置
int position = smallVideoHelper.getPlayPosition();
//不可视的是时候
if ((position < firstVisibleItem || position > lastVisibleItem)) {
//释放掉视频
smallVideoHelper.releaseVideoPlayer();
listVideoAdapter.notifyDataSetChanged();
}
}
}
});
smallVideoHelper.setGsyVideoOptionBuilder(gsySmallVideoHelperBuilder);
listVideoAdapter = new SimpleListVideoModel2Adapter(this, smallVideoHelper, gsySmallVideoHelperBuilder);
listVideoAdapter.setRootView(activityListVideo);
videoList.setAdapter(listVideoAdapter);
videoList.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
SimpleListVideoActivityMode2.this.firstVisibleItem = firstVisibleItem;
lastVisibleItem = firstVisibleItem + visibleItemCount;
//大于0说明有播放,//对应的播放列表TAG
if (smallVideoHelper.getPlayPosition() >= 0 && smallVideoHelper.getPlayTAG().equals(SimpleListVideoModel2Adapter.TAG)) {
//当前播放的位置
int position = smallVideoHelper.getPlayPosition();
//不可视的是时候
if ((position < firstVisibleItem || position > lastVisibleItem)) {
//如果是小窗口就不需要处理
if (!smallVideoHelper.isSmall()) {
//小窗口
int size = CommonUtil.dip2px(SimpleListVideoActivityMode2.this, 150);
smallVideoHelper.showSmallVideo(new Point(size, size), false, true);
}
} else {
if (smallVideoHelper.isSmall()) {
smallVideoHelper.smallVideoToNormal();
}
}
}
}
});
}
@Override
public void onBackPressed() {
if (smallVideoHelper.backFromFull()) {
return;
}
super.onBackPressed();
}
@Override
protected void onDestroy() {
super.onDestroy();
smallVideoHelper.releaseVideoPlayer();
GSYVideoManager.releaseAllVideos();
}
}
package com.example.gsyvideoplayer.simple;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import com.example.gsyvideoplayer.R;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
public class SimplePlayer extends AppCompatActivity {
StandardGSYVideoPlayer videoPlayer;
OrientationUtils orientationUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_play);
init();
}
private void init() {
videoPlayer = (StandardGSYVideoPlayer)findViewById(R.id.video_player);
String source1 = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4";
videoPlayer.setUp(source1, true, "测试视频");
//增加封面
ImageView imageView = new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageResource(R.mipmap.xxx1);
videoPlayer.setThumbImageView(imageView);
//增加title
videoPlayer.getTitleTextView().setVisibility(View.VISIBLE);
//设置返回键
videoPlayer.getBackButton().setVisibility(View.VISIBLE);
//设置旋转
orientationUtils = new OrientationUtils(this, videoPlayer);
//设置全屏按键功能,这是使用的是选择屏幕,而不是全屏
videoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
orientationUtils.resolveByClick();
}
});
//是否可以滑动调整
videoPlayer.setIsTouchWiget(true);
//设置返回按键功能
videoPlayer.getBackButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
videoPlayer.startPlayLogic();
}
@Override
protected void onPause() {
super.onPause();
videoPlayer.onVideoPause();
}
@Override
protected void onResume() {
super.onResume();
videoPlayer.onVideoResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
GSYVideoManager.releaseAllVideos();
if (orientationUtils != null)
orientationUtils.releaseListener();
}
@Override
public void onBackPressed() {
//先返回正常状态
if (orientationUtils.getScreenType() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
videoPlayer.getFullscreenButton().performClick();
return;
}
//释放所有
videoPlayer.setVideoAllCallBack(null);
super.onBackPressed();
}
}
package com.example.gsyvideoplayer.simple.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.model.VideoModel;
import com.example.gsyvideoplayer.video.SampleCoverVideo;
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
import java.util.ArrayList;
import java.util.List;
public class SimpleListVideoModel1Adapter extends BaseAdapter {
public static final String TAG = "ListNormalAdapter22";
private List<VideoModel> list = new ArrayList<>();
private LayoutInflater inflater = null;
private Context context;
private StandardGSYVideoPlayer curPlayer;
protected OrientationUtils orientationUtils;
protected boolean isPlay;
protected boolean isFull;
public SimpleListVideoModel1Adapter(Context context) {
super();
this.context = context;
inflater = LayoutInflater.from(context);
for (int i = 0; i < 40; i++) {
list.add(new VideoModel());
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_video_simple_model1, null);
holder.gsyVideoPlayer = (SampleCoverVideo) convertView.findViewById(R.id.video_item_player);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final String urlH = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4";
final String urlV = "http://7xse1z.com1.z0.glb.clouddn.com/1491813192";
final String url = (position % 2 == 0) ? urlH : urlV;
if (position % 2 == 0) {
holder.gsyVideoPlayer.loadCoverImage(url, R.mipmap.xxx1);
} else {
holder.gsyVideoPlayer.loadCoverImage(url, R.mipmap.xxx2);
}
holder.gsyVideoPlayer.setUpLazy(url, true, null, null, "这是title");
//增加title
holder.gsyVideoPlayer.getTitleTextView().setVisibility(View.GONE);
//设置返回键
holder.gsyVideoPlayer.getBackButton().setVisibility(View.GONE);
//设置全屏按键功能
holder.gsyVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.gsyVideoPlayer.startWindowFullscreen(context, false, true);
}
});
//防止错位设置
holder.gsyVideoPlayer.setPlayTag(TAG);
holder.gsyVideoPlayer.setPlayPosition(position);
//是否根据视频尺寸,自动选择竖屏全屏或者横屏全屏
holder.gsyVideoPlayer.setAutoFullWithSize(true);
//音频焦点冲突时是否释放
holder.gsyVideoPlayer.setReleaseWhenLossAudio(false);
//全屏动画
holder.gsyVideoPlayer.setShowFullAnimation(true);
//小屏时不触摸滑动
holder.gsyVideoPlayer.setIsTouchWiget(false);
//全屏是否需要lock功能
return convertView;
}
class ViewHolder {
SampleCoverVideo gsyVideoPlayer;
}
}
package com.example.gsyvideoplayer.simple.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.model.VideoModel;
import com.shuyu.gsyvideoplayer.utils.GSYVideoHelper;
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
import java.util.ArrayList;
import java.util.List;
public class SimpleListVideoModel2Adapter extends BaseAdapter {
public final static String TAG = "TT22";
private List<VideoModel> list = new ArrayList<>();
private LayoutInflater inflater = null;
private Context context;
private ViewGroup rootView;
private OrientationUtils orientationUtils;
private boolean isFullVideo;
private GSYVideoHelper smallVideoHelper;
private GSYVideoHelper.GSYVideoHelperBuilder gsySmallVideoHelperBuilder;
public SimpleListVideoModel2Adapter(Context context, GSYVideoHelper smallVideoHelper, GSYVideoHelper.GSYVideoHelperBuilder gsySmallVideoHelperBuilder) {
super();
this.context = context;
this.smallVideoHelper = smallVideoHelper;
this.gsySmallVideoHelperBuilder = gsySmallVideoHelperBuilder;
inflater = LayoutInflater.from(context);
for (int i = 0; i < 40; i++) {
list.add(new VideoModel());
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_video_simple_model2, null);
holder.videoContainer = (FrameLayout) convertView.findViewById(R.id.list_item_container);
holder.playerBtn = (ImageView) convertView.findViewById(R.id.list_item_btn);
holder.imageView = new ImageView(context);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//增加封面
holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
holder.imageView.setImageResource(R.mipmap.xxx1);
smallVideoHelper.addVideoPlayer(position, holder.imageView, TAG, holder.videoContainer, holder.playerBtn);
holder.playerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyDataSetChanged();
smallVideoHelper.setPlayPositionAndTag(position, TAG);
final String url = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4";
gsySmallVideoHelperBuilder.setVideoTitle("title " + position)
.setUrl(url);
smallVideoHelper.startPlay();
}
});
return convertView;
}
class ViewHolder {
FrameLayout videoContainer;
ImageView playerBtn;
ImageView imageView;
}
public void setRootView(ViewGroup rootView) {
this.rootView = rootView;
}
}
......@@ -15,10 +15,17 @@
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.gsyvideoplayer.MainActivity">
<Button
android:id="@+id/open_simple"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:text="简单播放" />
<Button
android:id="@+id/open_btn"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="打开Video" />
<Button
......
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<Button
android:id="@+id/simple_player"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="简单直接播放" />
<Button
android:id="@+id/simple_list_1"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="简单列表1" />
<Button
android:id="@+id/simple_list_2"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="简单列表2" />
<Button
android:id="@+id/simple_detail_1"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="简单详情1" />
<Button
android:id="@+id/simple_detail_2"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="简单详情2" />
</LinearLayout>
</ScrollView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_detail_player"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:id="@+id/post_detail_nested_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/post_media_height" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/detail_text"
android:textSize="16sp" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
android:id="@+id/detail_player"
android:layout_width="match_parent"
android:layout_height="@dimen/post_media_height" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_play"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000">
<com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
android:id="@+id/video_player"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.example.gsyvideoplayer.video.SampleCoverVideo
android:id="@+id/video_item_player"
android:layout_width="match_parent"
android:layout_height="@dimen/post_media_height"/>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/list_item_container"
android:layout_width="match_parent"
android:layout_height="@dimen/post_media_height"
android:scaleType="centerCrop"
android:src="@mipmap/xxx1" />
<ImageView
android:id="@+id/list_item_btn"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:src="@drawable/video_click_play_selector" />
</RelativeLayout>
\ No newline at end of file
......@@ -16,6 +16,9 @@
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.AppCompat.Full" parent="Theme.AppCompat.Translucent">
<item name="android:windowFullscreen">true</item>
</style>
<style name="dialog_style" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
......
## 种简单的使用方法
## 种简单的使用方法
### 一、列表中使用
#### 模式一 [ListVideoActivity](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/ListVideoActivity.java)
*注意:下面几种方式所在的Activity不要忘记配置manifest的config。*
```
<activity
android:name=".xxxxx"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
```
### 一、直接播放
[SimplePlayer](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimplePlayer.java)
### 二、列表中使用
#### 模式一 [SimpleListVideoActivityMode1](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimpleListVideoActivityMode1.java)
1、adapter布局中添加播放控件
```
......@@ -15,15 +29,16 @@
2、配置播放控件(也可以使用builder模式,详见下方detail模式中)
```
holder.gsyVideoPlayer.setUpLazy(url, true, null, null, "这是title");
//增加title
holder.gsyVideoPlayer.getTitleTextView().setVisibility(View.GONE);
//设置返回键
holder.gsyVideoPlayer.getBackButton().setVisibility(View.GONE);
//设置全屏按键功能 holder.gsyVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
//设置全屏按键功能
holder.gsyVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.gsyVideoPlayer.startWindowFullscreen(context, false, true);
holder.gsyVideoPlayer.startWindowFullscreen(context, false, true);
}
});
//防止错位设置
......@@ -37,8 +52,6 @@ holder.gsyVideoPlayer.setReleaseWhenLossAudio(false);
holder.gsyVideoPlayer.setShowFullAnimation(true);
//小屏时不触摸滑动
holder.gsyVideoPlayer.setIsTouchWiget(false);
//全屏是否需要lock功能
holder.gsyVideoPlayer.setNeedLockFull(true);
```
3、Activity中配置生命周期
......@@ -100,7 +113,7 @@ holder.gsyVideoPlayer.setNeedLockFull(true);
```
#### 模式二 [ListVideo2Activity](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/ListVideo2Activity.java)
#### 模式二 [SimpleListVideoActivityMode2](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimpleListVideoActivityMode2.java)
一、item布局中添加
```
......@@ -229,6 +242,7 @@ holder.gsyVideoPlayer.setNeedLockFull(true);
3、adapter中使用helper
```
···
smallVideoHelper.addVideoPlayer(position, holder.imageView, TAG, holder.videoContainer, holder.playerBtn);
holder.playerBtn.setOnClickListener(new View.OnClickListener() {
......@@ -242,12 +256,14 @@ holder.playerBtn.setOnClickListener(new View.OnClickListener() {
smallVideoHelper.startPlay();
}
});
···
```
### 、详情页播放
### 、详情页播放
#### 模式一 [DetailControlActivity](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/DetailControlActivity.java)
#### 模式一 [SimpleDetailActivityMode1](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode1.java)
1、布局中添加播放控件
```
......@@ -266,14 +282,20 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
3、重载配置
```
@Override
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
···
//调用父类方法
setContentView(R.layout.activity_detail_player);
detailPlayer = (StandardGSYVideoPlayer) findViewById(R.id.detail_player);
//增加title
detailPlayer.getTitleTextView().setVisibility(View.GONE);
detailPlayer.getBackButton().setVisibility(View.GONE);
initVideoBuilderMode();
···
});
}
@Override
public StandardGSYVideoPlayer getGSYVideoPlayer() {
return detailPlayer;
......@@ -292,17 +314,27 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
.setIsTouchWiget(true)
.setRotateViewAuto(false)
.setLockLand(false)
.setShowFullAnimation(true)//打开动画
.setShowFullAnimation(false)
.setNeedLockFull(true)
.setSeekRatio(1);
}
@Override
public void clickForFullScreen() {
}
/**
* 是否启动旋转横屏,true表示启动
*/
@Override
public boolean getDetailOrientationRotateAuto() {
return true;
}
```
#### 模式二 [DetailPlayer](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/DetailPlayer.java)
#### 模式二 [SimpleDetailActivityMode2](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode2.java)
1、布局中添加播放控件
```
......@@ -313,9 +345,8 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
```
2、配置播放器、添加旋转外部旋转支持、增加监听。(可以用builder模式,也可以会直接通过player设置
2、onCreate中配置播放器、添加旋转外部旋转支持、增加监听。(也可以会直接通过player设置,不用builder
```
//外部辅助的旋转,帮助全屏
orientationUtils = new OrientationUtils(this, detailPlayer);
//初始化不打开外部的旋转
......@@ -335,25 +366,11 @@ gsyVideoOption.setThumbImageView(imageView)
.setVideoAllCallBack(new GSYSampleCallBack() {
@Override
public void onPrepared(String url, Object... objects) {
Debuger.printfError("***** onPrepared **** " + objects[0]);//title
Debuger.printfError("***** onPrepared **** " + objects[1]);//当前全屏player
super.onPrepared(url, objects);
//开始播放了才能旋转和全屏
orientationUtils.setEnable(true);
//记录是否播放标记位
isPlay = true;
}
@Override
public void onEnterFullscreen(String url, Object... objects) {
super.onEnterFullscreen(url, objects);
Debuger.printfError("***** onEnterFullscreen **** " + objects[0]);//title
Debuger.printfError("***** onEnterFullscreen **** " + objects[1]);//当前全屏player
}
@Override
public void onAutoComplete(String url, Object... objects) {
super.onAutoComplete(url, objects);
}
@Override
public void onQuitFullscreen(String url, Object... objects) {
......@@ -372,13 +389,8 @@ gsyVideoOption.setThumbImageView(imageView)
orientationUtils.setEnable(!lock);
}
}
}).setGSYVideoProgressListener(new GSYVideoProgressListener() {
@Override
public void onProgress(int progress, int secProgress, int currentPosition, int duration) {
Debuger.printfLog(" progress " + progress + " secProgress " + secProgress + " currentPosition " + currentPosition + " duration " + duration);
}
}) .build(detailPlayer);
//全屏方法
}).build(detailPlayer);
detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
......@@ -386,7 +398,7 @@ detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener()
orientationUtils.resolveByClick();
//第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar
detailPlayer.startWindowFullscreen(DetailPlayer.this, true, true);
detailPlayer.startWindowFullscreen(SimpleDetailActivityMode2.this, true, true);
}
});
```
......@@ -394,53 +406,50 @@ detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener()
3、配置生命周期
```
@Override
public void onBackPressed() {
//配置返回
if (orientationUtils != null) {
orientationUtils.backToProtVideo();
}
if (GSYVideoManager.backFromWindowFull(this)) {
return;
}
super.onBackPressed();
@Override
public void onBackPressed() {
if (orientationUtils != null) {
orientationUtils.backToProtVideo();
}
@Override
protected void onPause() {
//暂停
detailPlayer.getFullWindowPlayer().onVideoPause();
super.onPause();
isPause = true;
if (GSYVideoManager.backFromWindowFull(this)) {
return;
}
@Override
protected void onResume() {
//恢复播放
detailPlayer.getFullWindowPlayer().onVideoResume(false);
super.onResume();
isPause = false;
super.onBackPressed();
}
@Override
protected void onPause() {
detailPlayer.getCurrentPlayer().onVideoPause();
super.onPause();
isPause = true;
}
@Override
protected void onResume() {
detailPlayer.getCurrentPlayer().onVideoResume(false);
super.onResume();
isPause = false;
}
@Override
protected void onDestroy() {
super.onDestroy();
if (isPlay) {
detailPlayer.getCurrentPlayer().release();
}
if (orientationUtils != null)
orientationUtils.releaseListener();
}
@Override
protected void onDestroy() {
//销毁
super.onDestroy();
if (isPlay) {
detailPlayer.getFullWindowPlayer().release();
}
if (orientationUtils != null)
orientationUtils.releaseListener();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//如果旋转了就全屏
if (isPlay && !isPause) {
detailPlayer.onConfigurationChanged(this, newConfig, orientationUtils, true, true);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//如果旋转了就全屏
if (isPlay && !isPause) {
detailPlayer.onConfigurationChanged(this, newConfig, orientationUtils, true, true);
}
}
```
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册