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" /> +