大佬教程收集整理的这篇文章主要介绍了android-scrollview – 当listitem在recyclerview中可见时播放/暂停视频,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
VideosAdapter类:
public class VideosAdapter extends RecyclerView.Adapter<VideosAdapter.ViewHolder> { private static String TAG = "VideosAdapter"; Context context; private ArrayList<String> urls; RecyclerView recyclerView; public static class ViewHolder extends RecyclerView.ViewHolder { public TextureView textureView; public TextView textView; public ViewHolder(View v) { super(v); textureView = (TextureView) v.findViewById(R.id.textureView); textView = (TextView) v.findViewById(R.id.textView); } } public VideosAdapter(Context context,RecyclerView recyclerView,final ArrayList<String> urls) { this.context = context; this.recyclerView = recyclerView; thiS.Urls = urls; recyclerView.addOnScrollListener(new RecyclerView.onScrollListener() { @Override public void onScrolled(RecyclerView recyclerView,int dx,int dy) { super.onScrolled(recyclerView,dx,dy); } @Override public void onScrollStateChanged(RecyclerView recyclerView,int newStatE) { super.onScrollStateChanged(recyclerView,newStatE); if(newState == RecyclerView.SCROLL_STATE_IDLE) { linearlayoutmanager layoutManager = ((linearlayoutmanager) recyclerView.getLayoutManager()); int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition(); int findFirstCompletelyVisibleItemPosition = layoutManager.findFirstCompletelyVisibleItemPosition(); int findLastVisibleItemPosition = layoutManager.findLastVisibleItemPosition(); int findLastCompletelyVisibleItemPosition = layoutManager.findLastCompletelyVisibleItemPosition(); *//*Log.i(tag,"firstVisiblePosition = " + String.valueOf(firstVisiblePosition)); Log.i(tag,"findFirstCompletelyVisibleItemPosition = " + String.valueOf(findFirstCompletelyVisibleItemPosition)); Log.i(tag,"findLastVisibleItemPosition = " + String.valueOf(findLastVisibleItemPosition)); Log.i(tag,"findLastCompletelyVisibleItemPosition = " + String.valueOf(findLastCompletelyVisibleItemPosition));*//* Log.i(tag,"//////////////////////////////////////////////////////////////"); if(findFirstCompletelyVisibleItemPosition>=0) { Log.i(tag,"Playing_URl = " + urls.get(findFirstCompletelyVisibleItemPosition)); int tempPrevIoUsUrl = findFirstCompletelyVisibleItemPosition - 1; if(tempPrevIoUsUrl>=0) Log.i(tag,"Stop_Playing_URl = " + urls.get(tempPrevIoUsUrl)); } else { Log.i(tag,"Playing_URl = " + urls.get(firstVisiblePosition)); int tempPrevIoUsUrl = firstVisiblePosition - 1; if(tempPrevIoUsUrl>=0) Log.i(tag,"Stop_Playing_URl = " + urls.get(tempPrevIoUsUrl)); } } } }); } // Create new views (invoked by the layout manager) @Override public VideosAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewTypE) { // create a new view View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_main,parent,falsE); ViewHolder viewHolder = new ViewHolder(v); return viewHolder; } // replace the contents of a view (invoked by the layout manager) @Override public void onBindViewHolder(ViewHolder holder,int position) { String url = urls.get(position); holder.textView.setText(url); //Log.i("BindViewHolderCalledFor",position + " = " + url); VideoPlayController videoPlayController = new VideoPlayController(context,recyclerView,holder.textureView,url); if(position==0) { videoPlayController.loadVideo(); } } @Override public int getItemCount() { return urls.size(); }
}
VideoPlayController类:
public class VideoPlayController implements TextureView.SurfaCETextureListener { private static String TAG = "VideoPlayController"; Context context; String url; MediaPlayer mp; Surface surface; SurfaCETexture s; RecyclerView recyclerView; TextureView textureView; public VideoPlayController(Context context,TextureView textureView,final String url) { this.context = context; this.recyclerView = recyclerView; this.textureView = textureView; thiS.Url = url; recyclerView.addOnScrollListener(new RecyclerView.onScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView,newStatE); if(newState == RecyclerView.SCROLL_STATE_IDLE) { Log.i(tag,"OnScrollStateChangedCalled For: " + url); //When scroll is at idol position check if item is visible } } }); } public void loadVideo() { textureView.setSurfaCETextureListener(this); } @Override public void onSurfaCETextureAvailable(final SurfaCETexture surface,int width,int height) { Log.d("surface_available-url",thiS.Url); startVideo(surfacE); } @Override public void onSurfaCETextureSizeChanged(SurfaCETexture surface,int height) { Log.d("surface_destroyed-url",thiS.Url); } @Override public Boolean onSurfaCETextureDestroyed(SurfaCETexture surfacE) { Log.d("surface_destroyed-url",thiS.Url); this.mp.stop(); this.mp.reset(); this.mp.release(); this.mp = null; return false; } @Override public void onSurfaCETextureupdated(SurfaCETexture surfacE) { } public void startVideo(SurfaCETexture t) { this.surface = new Surface(t); this.mp = new MediaPlayer(); this.mp.setSurface(this.surfacE); try { Uri uri = Uri.parse(thiS.Url); this.mp.setDatasource(url); this.mp.prepareAsync(); this.mp.setOnPreparedListener(new MediaPlayer.onPreparedListener() { public void onPrepared(MediaPlayer mp) { mp.setLooping(true); mp.start(); } }); } catch (IllegalArgumentexception e1) { e1.printStackTrace(); } catch (SecurityException e1) { e1.printStackTrace(); } catch (IllegalStateException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } try { } catch (IllegalArgumentexception E) { e.printStackTrace(); } catch (SecurityException E) { e.printStackTrace(); } catch (IllegalStateException E) { e.printStackTrace(); } try { } catch (IllegalStateException E) { e.printStackTrace(); } } public void changePlayState() { if(this.mp.isPlaying()) this.mp.stop(); else this.mp.start(); } public static Boolean isViewVisible(View subView,View parentView) { Rect scrollBounds = new Rect(); parentView.getHitRect(scrollBounds); if (subView.getLocalVisibleRect(scrollBounds)) { return true; } return false; }
}
为了实现这一点,我得到了this线程中讨论的可见项目位置.但我不知道如何将可见滚动位置传递给我的VideoPlayController类以及如何根据滚动位置跟踪和访问正确的对象.
以上是大佬教程为你收集整理的android-scrollview – 当listitem在recyclerview中可见时播放/暂停视频全部内容,希望文章能够帮你解决android-scrollview – 当listitem在recyclerview中可见时播放/暂停视频所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。