提交 2b07169c 编写于 作者: S shuyu

add normal player recycler demo

上级 fccf1a22
......@@ -59,6 +59,10 @@
android:name=".WebDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name=".RecyclerViewActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
</application>
</manifest>
\ No newline at end of file
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);
......
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<VideoModel> 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();
}
}
......@@ -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);
......
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<VideoModel> itemDataList = null;
private Context context = null;
public RecyclerNormalAdapter(Context context, List<VideoModel> 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<VideoModel> data) {
itemDataList = data;
notifyDataSetChanged();
}
}
......@@ -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;
}
......
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
......@@ -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
*
......
......@@ -35,6 +35,13 @@
android:layout_marginTop="20dp"
android:text="List Video2" />
<Button
android:id="@+id/recycler"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="recycler" />
<Button
android:id="@+id/recycler_2"
android:layout_width="120dp"
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/list_item_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册