1.配置
在project下 build.gradle中添加
allprojects {
repositories {
......
maven { url 'https://www.jitpack.io' }
}
}
在app下 build.gradle中添加
dependencies {
......
implementation 'com.github.zhanglinkai:HeartVideo:v1.0.1'
}
在mainfest中添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
在Activity 标签中添加
<activity android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait">
2.Adapter适配器
layout_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.heartfor.heartvideo.video.HeartVideo
android:id="@+id/myvideo"
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_marginBottom="10dp"/>
</LinearLayout>
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
private Context context;
public MyAdapter(Context context){
this.context=context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.layout_item,parent,false);
ViewHolder holder=new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
String path="http://vjs.zencdn.net/v/oceans.mp4";
String image="https://seopic.699pic.com/photo/40193/8990.jpg_wh1200.jpg";
HeartVideoInfo info=HeartVideoInfo.Builder().setTitle("为何大家都选拼BOSS?").setPath(path).setImagePath(image).setSaveProgress(true).builder();
VideoControl control=new VideoControl(context);
control.setInfo(info);
holder.myvideo.setHeartVideoContent(control);
}
@Override
public int getItemCount() {
return 10;
}
public class ViewHolder extends RecyclerView.ViewHolder{
public HeartVideo myvideo;
public ViewHolder(View itemView) {
super(itemView);
myvideo=(HeartVideo)itemView.findViewById(R.id.myvideo);
}
}
}
3.Activity主代码
activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recy"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
MainActivity
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private LinearLayoutManager linearmanager;
private int firstVisibleItem;
private int lastVisibleItem;
private int visibleCount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recy);
linearmanager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearmanager);
MyAdapter adapter = new MyAdapter(this);
recyclerView.setAdapter(adapter);
//重复使用监听
recyclerView.setRecyclerListener(new RecyclerView.RecyclerListener() {
@Override
public void onViewRecycled(RecyclerView.ViewHolder holder) {
HeartVideo heartVideo = ((MyAdapter.ViewHolder) holder).myvideo;
if (heartVideo == HeartVideoManager.getInstance().getCurrPlayVideo()) {
HeartVideoManager.getInstance().release();
}
}
});
//滑动监听
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
switch (newState) {
case SCROLL_STATE_IDLE: //滚动停止
autoPlayVideo(recyclerView);
break;
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
firstVisibleItem = linearmanager.findFirstVisibleItemPosition();
lastVisibleItem = linearmanager.findLastVisibleItemPosition();
visibleCount = lastVisibleItem - firstVisibleItem;
}
});
}
private void autoPlayVideo(RecyclerView recyclerview) {
RecyclerView.LayoutManager layoutManager = recyclerview.getLayoutManager();
for (int i = 0; i < visibleCount; i++) {
if (layoutManager != null && layoutManager.getChildAt(i) != null && layoutManager.getChildAt(i).findViewById(R.id.myvideo) != null) {
HeartVideo heartVideo = (HeartVideo) layoutManager.getChildAt(i).findViewById(R.id.myvideo);
Rect rect = new Rect();
heartVideo.getLocalVisibleRect(rect);
int videoheight = heartVideo.getHeight();
if (rect.top == 0 && rect.bottom == videoheight) {
heartVideo.start();
return;
}
}
}
}
@Override
protected void onStop() {
super.onStop();
HeartVideoManager.getInstance().release();
}
@Override
public void onBackPressed() {
if (HeartVideoManager.getInstance().onBackPressd()) return;
super.onBackPressed();
}
}