VerticalViewpager上下滑动
在主界面
private void initViewPager() { VerticalViewPager viewPager = (VerticalViewPager) findViewById(R.id.vertical_viewpager); //viewPager.setPageTransformer(false, new ZoomOutTransformer()); //viewPager.setPageTransformer(true, new StackTransformer()); String title = "ContentFragment"; viewPager.setAdapter(new ContentFragmentAdapter.Holder(getSupportFragmentManager()) .add(ContentFragment.newInstance(title, 1)) .add(ContentFragment.newInstance(title, 2)) .add(ContentFragment.newInstance(title, 3)) .add(ContentFragment.newInstance(title, 4)) .add(ContentFragment.newInstance(title, 5)) .set()); //If you setting other scroll mode, the scrolled fade is shown from either side of display. viewPager.setOverScrollMode(View.OVER_SCROLL_NEVER); }布局
<com.huoshan.api.huoshan.utils.VerticalViewPager android:id="@+id/vertical_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" />
ContentFragment
public class ContentFragment extends Fragment implements VideoApi{ private VideoView videoView ; private VideoPresenter videoPresenter; private TextView tv,fc_name,fc_desc; private Button fc_guan; private SimpleDraweeView fc_img; private SwipeRefreshLayout refreshLayout; public ContentFragment() { } public static Fragment newInstance(String title, int position) { Bundle args = new Bundle(); args.putString("title", title); args.putInt("position", position); ContentFragment fragment = new ContentFragment(); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); videoPresenter = new VideoPresenter(this); videoPresenter.getVideo(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_content, container, false); videoView = view.findViewById(R.id.videoView); tv = view.findViewById(R.id.ving_tv); /* fc_img = view.findViewById(R.id.fc_img); fc_name = view.findViewById(R.id.fc_name); fc_guan = view.findViewById(R.id.fc_guan); fc_desc = view.findViewById(R.id.fc_desc);*/ tv.setText("火力400"); /*//按钮的点击事件 fc_guan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(),"关注成功",Toast.LENGTH_SHORT).show(); fc_guan.setVisibility(View.GONE); } });*/ return view; } public String getTitle() { return getArguments().getString("title"); } public int getPosition() { return getArguments().getInt("position"); } @Override public void show(VideoBeans videoBeans) { List<VideoBeans.DataBeanX> data = videoBeans.getData(); String s = data.get(0).getData().getVideo().getUrl_list().get(0); MediaController mediaController = new MediaController(getContext()); //播放视频 mediaController.setVisibility(View.INVISIBLE); //设置视频控制器 videoView.setMediaController(mediaController); //这里用相对布局包裹videoview 实现视频全屏播放 RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); videoView.setLayoutParams(layoutParams); //播放完成回调 videoView.setOnCompletionListener( new MyPlayerOnCompletionListener()); //设置视频路径 videoView.setVideoURI(Uri.parse(s)); //开始播放视频 videoView.start(); //设置值 String s1 = data.get(0).getData().getAuthor().getAvatar_jpg().getUrl_list().get(0); /* Uri uri = Uri.parse(s1); fc_img.setImageURI(uri); String nickname = data.get(0).getData().getAuthor().getNickname(); fc_name.setText(nickname); String ti = data.get(0).getData().getTitle(); fc_desc.setText(ti);*/ } class MyPlayerOnCompletionListener implements MediaPlayer.OnCompletionListener { @Override public void onCompletion(MediaPlayer mp) { Toast.makeText( getActivity(), "播放完成了", Toast.LENGTH_SHORT).show(); } } }contentFragment布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <VideoView android:id="@+id/videoView" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp"> <ImageView android:id="@+id/ving_back" android:layout_alignParentLeft="true" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:background="@drawable/a3z" android:layout_width="35dp" android:layout_height="35dp" /> <ImageView android:id="@+id/ving_zan" android:layout_marginLeft="55dp" android:layout_marginTop="10dp" android:background="@drawable/ab_" android:layout_width="35dp" android:layout_height="35dp" /> <TextView android:id="@+id/ving_tv" android:textSize="20sp" android:textColor="#ffffff" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/ving_share" android:layout_alignParentRight="true" android:layout_marginTop="10dp" android:layout_marginRight="10dp" android:background="@drawable/acu" android:layout_width="35dp" android:layout_height="35dp" /> </RelativeLayout> </RelativeLayout> </LinearLayout>ContentAdapter
public class ContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ContentView(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_content, parent, false)); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ContentView content = (ContentView) holder; content.textView.setText("content" + position); } @Override public int getItemCount() { return 15; } public class ContentView extends RecyclerView.ViewHolder { private TextView textView; public ContentView(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.context_text); } } }
itemcontent布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/context_text" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="left" android:textSize="20sp" android:layout_margin="16dip" android:text="content" android:textColor="@android:color/black"/> </LinearLayout>
ContentFragmentAdapter
public class ContentFragmentAdapter extends FragmentPagerAdapter { private List<Fragment> fragments = new ArrayList<>(); public ContentFragmentAdapter(FragmentManager fm, List<Fragment> fragments) { super(fm); this.fragments = fragments; } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public CharSequence getPageTitle(int position) { return ((ContentFragment)fragments.get(position)).getTitle(); } public static class Holder { private final List<Fragment> fragments = new ArrayList<>(); private FragmentManager manager; public Holder(FragmentManager manager) { this.manager = manager; } public Holder add(Fragment f) { fragments.add(f); return this; } public ContentFragmentAdapter set() { return new ContentFragmentAdapter(manager, fragments); } }}
一个工具类
public class VerticalViewPager extends ViewPager { public VerticalViewPager(Context context) { super(context); init(); } public VerticalViewPager(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { // The majority of the magic happens here //设置setPageTransformer来实现竖直滑动 setPageTransformer(true, new VerticalPageTransformer()); // The easiest way to get rid of the overscroll drawing that happens on the left and right setOverScrollMode(OVER_SCROLL_NEVER); } private class VerticalPageTransformer implements ViewPager.PageTransformer { @Override public void transformPage(View view, float position) { if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0); } else if (position <= 1) { // [-1,1] view.setAlpha(1); // Counteract the default slide transition view.setTranslationX(view.getWidth() * -position); //set Y position to swipe in from top float yPosition = position * view.getHeight(); view.setTranslationY(yPosition); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0); } } } /** * Swaps the X and Y coordinates of your touch event. */ private MotionEvent swapXY(MotionEvent ev) { float width = getWidth(); float height = getHeight(); float newX = (ev.getY() / height) * width; float newY = (ev.getX() / width) * height; ev.setLocation(newX, newY); return ev; } @Override public boolean onInterceptTouchEvent(MotionEvent ev){ boolean intercepted = super.onInterceptTouchEvent(swapXY(ev)); swapXY(ev); // return touch coordinates to original reference frame for any child views return intercepted; } @Override public boolean onTouchEvent(MotionEvent ev) { return super.onTouchEvent(swapXY(ev)); } }