implementation 'com.yc:PagerLib:1.0.1'
<com.yc.pagerlib.pager.VerticalViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在activity中,这里是Viewpager+FragmentStatePagerAdapter+Fragment
private void initViewPager() {
List<Video> list = new ArrayList<>();
ArrayList<Fragment> fragments = new ArrayList<>();
//数据源注意,使用的时候替换成你的,这里设置一些假数据
for (int a = 0; a< DataProvider.VideoPlayerList.length ; a++){
Video video = new Video(DataProvider.VideoPlayerTitle[a],
10,"",DataProvider.VideoPlayerList[a]);
list.add(video);
fragments.add(VideoFragment.newInstant(DataProvider.VideoPlayerList[a]));
}
vp.setOffscreenPageLimit(1);
vp.setCurrentItem(0);
vp.setOrientation(DirectionalViewPager.VERTICAL);
FragmentManager supportFragmentManager = getSupportFragmentManager();
MyPagerAdapter myPagerAdapter = new MyPagerAdapter(fragments, supportFragmentManager);
vp.setAdapter(myPagerAdapter);
}
class MyPagerAdapter extends FragmentStatePagerAdapter{
private ArrayList<Fragment> list;
public MyPagerAdapter(ArrayList<Fragment> list , FragmentManager fm){
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int i) {
return list.get(i);
}
@Override
public int getCount() {
return list!=null ? list.size() : 0;
}
}
在fragment中做视频播放相关操作
@Override
public void onStop() {
super.onStop();
VideoPlayerManager.instance().releaseVideoPlayer();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_video, container, false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
videoPlayer = view.findViewById(R.id.video_player);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d("初始化操作","------"+index++);
VideoPlayerController controller = new VideoPlayerController(getActivity());
videoPlayer.setUp(url,null);
videoPlayer.setPlayerType(ConstantKeys.IjkPlayerType.TYPE_IJK);
videoPlayer.setController(controller);
ImageUtils.loadImgByPicasso(getActivity(),"",
R.drawable.image_default,controller.imageView());
}
PagerLayoutManager viewPagerLayoutManager = new PagerLayoutManager(
this, OrientationHelper.VERTICAL);
recyclerView.setLayoutManager(viewPagerLayoutManager);
设置layoutManager初始化和销毁相关的监听
viewPagerLayoutManager.setOnViewPagerListener(new OnPagerListener() {
@Override
public void onInitComplete() {
System.out.println("OnPagerListener---onInitComplete--"+"初始化完成");
}
@Override
public void onPageRelease(boolean isNext, int position) {
System.out.println("OnPagerListener---onPageRelease--"+position+"-----"+isNext);
}
@Override
public void onPageSelected(int position, boolean isBottom) {
System.out.println("OnPagerListener---onPageSelected--"+position+"-----"+isBottom);
}
});
可以通过反射修改属性,注意,使用反射的时候,建议手动try-catch,避免异常导致崩溃。代码如下所示:
/**
* 修改滑动灵敏度
* @param flingDistance 滑动惯性,默认是75
* @param minimumVelocity 最小滑动值,默认是1200
*/
public void setScrollFling(int flingDistance , int minimumVelocity){
try {
Field mFlingDistance = ViewPager.class.getDeclaredField("mFlingDistance");
mFlingDistance.setAccessible(true);
Object o = mFlingDistance.get(this);
Log.d("setScrollFling",o.toString());
//默认值75
mFlingDistance.set(this, flingDistance);
Field mMinimumVelocity = ViewPager.class.getDeclaredField("mMinimumVelocity");
mMinimumVelocity.setAccessible(true);
Object o1 = mMinimumVelocity.get(this);
Log.d("setScrollFling",o1.toString());
//默认值1200
mMinimumVelocity.set(this,minimumVelocity);
} catch (Exception e){
e.printStackTrace();
}
}
try {
//attachToRecyclerView源码上的方法可能会抛出IllegalStateException异常,这里手动捕获一下
RecyclerView.OnFlingListener onFlingListener = mRecyclerView.getOnFlingListener();
//源码中判断了,如果onFlingListener已经存在的话,再次设置就直接抛出异常,那么这里可以判断一下
if (onFlingListener==null){
mPagerSnapHelper.attachToRecyclerView(mRecyclerView);
}
} catch (IllegalStateException e){
e.printStackTrace();
}
Copyright 2017 yangchong211(github.com/yangchong211)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.