VerticalViewpager上下滑动

VerticalViewpager上下滑动

原创 2018年01月04日 10:15:13

在主界面

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));
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值