diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9ec33804f71df82acc09ae5d8addb7e6dc832aa7..dbbabf07b02c4a79bd5e4aa0c439de0ad01eaaf6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,6 +59,10 @@
android:name=".WebDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/gsyvideoplayer/MainActivity.java b/app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
index 2c691ba77716ae3cb15f92258341c4d02f3ed35c..0399e82f84f08ff32e389f0a5728f64ec29a2173 100644
--- a/app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
+++ b/app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
@@ -1,5 +1,6 @@
package com.example.gsyvideoplayer;
+import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
@@ -26,7 +27,7 @@ public class MainActivity extends AppCompatActivity {
ButterKnife.bind(this);
}
- @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_2, R.id.list_detail_list, R.id.web_detail})
+ @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})
public void onClick(View view) {
switch (view.getId()) {
case R.id.open_btn:
@@ -41,6 +42,10 @@ public class MainActivity extends AppCompatActivity {
//支持全屏重力旋转的列表播放,滑动后不会被销毁
JumpUtils.goToVideoPlayer2(this);
break;
+ case R.id.recycler:
+ //recycler的demo
+ JumpUtils.goToVideoRecyclerPlayer(this);
+ break;
case R.id.recycler_2:
//recycler的demo
JumpUtils.goToVideoRecyclerPlayer2(this);
diff --git a/app/src/main/java/com/example/gsyvideoplayer/RecyclerViewActivity.java b/app/src/main/java/com/example/gsyvideoplayer/RecyclerViewActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d2086cdda35626c2cd1450b07735db01476fa44
--- /dev/null
+++ b/app/src/main/java/com/example/gsyvideoplayer/RecyclerViewActivity.java
@@ -0,0 +1,126 @@
+package com.example.gsyvideoplayer;
+
+
+import android.os.Build;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.transition.Explode;
+import android.view.Window;
+
+import com.example.gsyvideoplayer.adapter.ListNormalAdapter;
+import com.example.gsyvideoplayer.adapter.RecyclerBaseAdapter;
+import com.example.gsyvideoplayer.adapter.RecyclerNormalAdapter;
+
+import com.example.gsyvideoplayer.model.VideoModel;
+import com.shuyu.gsyvideoplayer.GSYVideoManager;
+import com.shuyu.gsyvideoplayer.GSYVideoPlayer;
+import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class RecyclerViewActivity extends AppCompatActivity {
+
+
+ @BindView(R.id.list_item_recycler)
+ RecyclerView videoList;
+
+ LinearLayoutManager linearLayoutManager;
+
+ RecyclerBaseAdapter recyclerBaseAdapter;
+
+ List dataList = new ArrayList<>();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // 设置一个exit transition
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
+ getWindow().setEnterTransition(new Explode());
+ getWindow().setExitTransition(new Explode());
+ }
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_recycler_view);
+ ButterKnife.bind(this);
+
+ resolveData();
+
+ final RecyclerNormalAdapter recyclerNormalAdapter = new RecyclerNormalAdapter(this, dataList);
+ linearLayoutManager = new LinearLayoutManager(this);
+ videoList.setLayoutManager(linearLayoutManager);
+ videoList.setAdapter(recyclerNormalAdapter);
+
+ videoList.addOnScrollListener(new RecyclerView.OnScrollListener() {
+
+ int firstVisibleItem, lastVisibleItem;
+
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ }
+
+ @Override
+ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ super.onScrolled(recyclerView, dx, dy);
+ firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
+ lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
+ //大于0说明有播放
+ if (GSYVideoManager.instance().getPlayPosition() >= 0) {
+ //当前播放的位置
+ int position = GSYVideoManager.instance().getPlayPosition();
+ //对应的播放列表TAG
+ if (GSYVideoManager.instance().getPlayTag().equals(ListNormalAdapter.TAG)
+ && (position < firstVisibleItem || position > lastVisibleItem)) {
+
+ //如果滑出去了上面和下面就是否,和今日头条一样
+ GSYVideoPlayer.releaseAllVideos();
+ recyclerNormalAdapter.notifyDataSetChanged();
+ }
+ }
+ }
+ });
+
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (StandardGSYVideoPlayer.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();
+ GSYVideoPlayer.releaseAllVideos();
+ }
+
+
+ private void resolveData() {
+ for (int i = 0; i < 19; i++) {
+ VideoModel videoModel = new VideoModel();
+ dataList.add(videoModel);
+ }
+ if (recyclerBaseAdapter != null)
+ recyclerBaseAdapter.notifyDataSetChanged();
+ }
+
+}
diff --git a/app/src/main/java/com/example/gsyvideoplayer/adapter/ListNormalAdapter.java b/app/src/main/java/com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
index eff17520fb5ee210a1808d08fda116e23901db1d..19a2ae9ad70827cf468a2f4f75a9d0bcba4c8152 100644
--- a/app/src/main/java/com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
+++ b/app/src/main/java/com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
@@ -149,7 +149,7 @@ public class ListNormalAdapter extends BaseAdapter {
//holder.gsyVideoPlayer.setLooping(true);
holder.gsyVideoPlayer.setNeedLockFull(true);
- holder.gsyVideoPlayer.setSpeed(2);
+ //holder.gsyVideoPlayer.setSpeed(2);
holder.gsyVideoPlayer.setPlayPosition(position);
diff --git a/app/src/main/java/com/example/gsyvideoplayer/adapter/RecyclerNormalAdapter.java b/app/src/main/java/com/example/gsyvideoplayer/adapter/RecyclerNormalAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..c80949565c88f3160019213c67f6818e133ee67e
--- /dev/null
+++ b/app/src/main/java/com/example/gsyvideoplayer/adapter/RecyclerNormalAdapter.java
@@ -0,0 +1,63 @@
+package com.example.gsyvideoplayer.adapter;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.example.gsyvideoplayer.R;
+import com.example.gsyvideoplayer.holder.RecyclerItemNormalHolder;
+import com.example.gsyvideoplayer.holder.RecyclerItemViewHolder;
+import com.example.gsyvideoplayer.model.VideoModel;
+import com.shuyu.gsyvideoplayer.utils.ListVideoUtil;
+
+import java.util.List;
+
+/**
+ * Created by guoshuyu on 2017/1/9.
+ */
+
+public class RecyclerNormalAdapter extends RecyclerView.Adapter {
+ private final static String TAG = "RecyclerBaseAdapter";
+
+ private List itemDataList = null;
+ private Context context = null;
+
+ public RecyclerNormalAdapter(Context context, List itemDataList) {
+ this.itemDataList = itemDataList;
+ this.context = context;
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
+ int viewType) {
+ View v = LayoutInflater.from(context).inflate(R.layout.list_video_item_normal, parent, false);
+ final RecyclerView.ViewHolder holder = new RecyclerItemNormalHolder(context, v);
+ return holder;
+
+ }
+
+ @Override
+ public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
+ RecyclerItemNormalHolder recyclerItemViewHolder = (RecyclerItemNormalHolder) holder;
+ recyclerItemViewHolder.setRecyclerBaseAdapter(this);
+ recyclerItemViewHolder.onBind(position, itemDataList.get(position));
+ }
+
+ @Override
+ public int getItemCount() {
+ return itemDataList.size();
+ }
+
+
+ @Override
+ public int getItemViewType(int position) {
+ return 1;
+ }
+
+ public void setListData(List data) {
+ itemDataList = data;
+ notifyDataSetChanged();
+ }
+}
diff --git a/app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemBaseHolder.java b/app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemBaseHolder.java
index f071c9f8e71065a933b60d03443f699e07059b39..b1776f44b774a06992b67a73b1a712a456099667 100644
--- a/app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemBaseHolder.java
+++ b/app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemBaseHolder.java
@@ -12,7 +12,7 @@ import com.shuyu.gsyvideoplayer.utils.ListVideoUtil;
public class RecyclerItemBaseHolder extends RecyclerView.ViewHolder {
- RecyclerBaseAdapter recyclerBaseAdapter;
+ RecyclerView.Adapter recyclerBaseAdapter;
ListVideoUtil listVideoUtil;
@@ -20,11 +20,11 @@ public class RecyclerItemBaseHolder extends RecyclerView.ViewHolder {
super(itemView);
}
- public RecyclerBaseAdapter getRecyclerBaseAdapter() {
+ public RecyclerView.Adapter getRecyclerBaseAdapter() {
return recyclerBaseAdapter;
}
- public void setRecyclerBaseAdapter(RecyclerBaseAdapter recyclerBaseAdapter) {
+ public void setRecyclerBaseAdapter(RecyclerView.Adapter recyclerBaseAdapter) {
this.recyclerBaseAdapter = recyclerBaseAdapter;
}
diff --git a/app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemNormalHolder.java b/app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemNormalHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd5c21e3eb2d8d7093c6747415dc28f4bb8d02a0
--- /dev/null
+++ b/app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemNormalHolder.java
@@ -0,0 +1,119 @@
+package com.example.gsyvideoplayer.holder;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import com.example.gsyvideoplayer.R;
+import com.example.gsyvideoplayer.listener.SampleListener;
+import com.example.gsyvideoplayer.model.VideoModel;
+import com.shuyu.gsyvideoplayer.GSYVideoManager;
+import com.shuyu.gsyvideoplayer.utils.Debuger;
+import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by guoshuyu on 2017/1/9.
+ */
+
+public class RecyclerItemNormalHolder extends RecyclerItemBaseHolder {
+
+ public final static String TAG = "RecyclerView2List";
+
+ protected Context context = null;
+
+ @BindView(R.id.video_item_player)
+ StandardGSYVideoPlayer gsyVideoPlayer;
+
+ ImageView imageView;
+
+ public RecyclerItemNormalHolder(Context context, View v) {
+ super(v);
+ this.context = context;
+ ButterKnife.bind(this, v);
+ imageView = new ImageView(context);
+ }
+
+ public void onBind(final int position, VideoModel videoModel) {
+
+ //增加封面
+ imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+ if (position % 2 == 0) {
+ imageView.setImageResource(R.mipmap.xxx1);
+ } else {
+ imageView.setImageResource(R.mipmap.xxx2);
+ }
+ if (imageView.getParent() != null) {
+ ViewGroup viewGroup = (ViewGroup)imageView.getParent();
+ viewGroup.removeView(imageView);
+ }
+ gsyVideoPlayer.setThumbImageView(imageView);
+
+ final String url = "http://baobab.wdjcdn.com/14564977406580.mp4";
+
+ //默认缓存路径
+ gsyVideoPlayer.setUp(url, true , null, "这是title");
+
+ //增加title
+ gsyVideoPlayer.getTitleTextView().setVisibility(View.GONE);
+
+ //设置返回键
+ gsyVideoPlayer.getBackButton().setVisibility(View.GONE);
+
+ //设置全屏按键功能
+ gsyVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ resolveFullBtn(gsyVideoPlayer);
+ }
+ });
+ gsyVideoPlayer.setRotateViewAuto(true);
+ gsyVideoPlayer.setLockLand(true);
+ gsyVideoPlayer.setPlayTag(TAG);
+ gsyVideoPlayer.setShowFullAnimation(true);
+ //循环
+ //gsyVideoPlayer.setLooping(true);
+ gsyVideoPlayer.setNeedLockFull(true);
+
+ //gsyVideoPlayer.setSpeed(2);
+
+ gsyVideoPlayer.setPlayPosition(position);
+
+ gsyVideoPlayer.setStandardVideoAllCallBack(new SampleListener(){
+ @Override
+ public void onPrepared(String url, Object... objects) {
+ super.onPrepared(url, objects);
+ Debuger.printfLog("onPrepared");
+ if (!gsyVideoPlayer.isIfCurrentIsFullscreen()) {
+ //静音
+ GSYVideoManager.instance().setNeedMute(true);
+ }
+
+ }
+
+ @Override
+ public void onQuitFullscreen(String url, Object... objects) {
+ super.onQuitFullscreen(url, objects);
+ //全屏不静音
+ GSYVideoManager.instance().setNeedMute(true);
+ }
+
+ @Override
+ public void onEnterFullscreen(String url, Object... objects) {
+ super.onEnterFullscreen(url, objects);
+ GSYVideoManager.instance().setNeedMute(false);
+ }
+ });
+ }
+
+ /**
+ * 全屏幕按键处理
+ */
+ private void resolveFullBtn(final StandardGSYVideoPlayer standardGSYVideoPlayer) {
+ standardGSYVideoPlayer.startWindowFullscreen(context, true, true);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java b/app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
index 1b2f3e91efe90b87b27180c3e9c972081ff0d479..a7e653c14cce00e41625a82d60d6cddb02d1d561 100644
--- a/app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
+++ b/app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
@@ -14,7 +14,9 @@ import com.example.gsyvideoplayer.ListVideoActivity;
import com.example.gsyvideoplayer.PlayActivity;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.RecyclerView2Activity;
+import com.example.gsyvideoplayer.RecyclerViewActivity;
import com.example.gsyvideoplayer.WebDetailActivity;
+import com.example.gsyvideoplayer.adapter.RecyclerNormalAdapter;
/**
* Created by shuyu on 2016/11/11.
@@ -64,6 +66,17 @@ public class JumpUtils {
ActivityCompat.startActivity(activity, intent, activityOptions.toBundle());
}
+ /**
+ * 跳转到视频列表
+ *
+ * @param activity
+ */
+ public static void goToVideoRecyclerPlayer(Activity activity) {
+ Intent intent = new Intent(activity, RecyclerViewActivity.class);
+ ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(activity);
+ ActivityCompat.startActivity(activity, intent, activityOptions.toBundle());
+ }
+
/**
* 跳转到视频列表2
*
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 037db628010a44c14b138c139b7220f463329f8c..267a8c13d19d4e9f1fdcd0fd5c3dd20050c63a3e 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -35,6 +35,13 @@
android:layout_marginTop="20dp"
android:text="List Video2" />
+
+