博主声明:

转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主 威威喵 原创,请多支持与指教。

本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/smile_running

抖音几乎已经成为了我们日常生活中使用比较频繁的 App,无聊之时或工作之后可以刷一刷短视频来供我们娱乐与放松。看到抖音的视屏切换效果,觉得用 ViewPager 可以做出一样的效果。想一想之前用的 ViewPager 都是横向切换的,虽然很经常用,但是从来没实现过竖向的切换效果,说做就做吧。

  • 效果图

  • 实现思路及代码

把Touch事件的x,y坐标做一下交换,从原先的x坐标差值转变成y坐标的差值,正符合了我们手指从横向滑动转成了纵向滑动。再通过实现PageTransformer接口,改变view的平移方向,便实现了如上效果。

下面我们贴出代码,并理解一下整个实现过程。

public class VerticalViewPager extends ViewPager {public VerticalViewPager(Context context) {super(context);}public VerticalViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onTouchEvent(MotionEvent ev) {return super.onTouchEvent(swapTouchEvent(MotionEvent.obtain(ev)));}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {return super.onInterceptTouchEvent(swapTouchEvent(MotionEvent.obtain(ev)));}private MotionEvent swapTouchEvent(MotionEvent event) {float width = getWidth();float height = getHeight();event.setLocation((event.getY() / height) * width, ((event.getX() / width) * height));return event;}
}

首先,我们自定义一个继承ViewPager的类,我们重点关注一下swapTouchEvent()方法。这个方法是将MotionEvent事件的x坐标换成y坐标,而y坐标换成x坐标。当然,这个是大神代码的,我们理解了就好。其实现实在妙不可言!

public class VerticalPageTransformer implements ViewPager.PageTransformer {@Overridepublic void transformPage(View view, float position) {/***  0 当前界面*  -1 前一页*  1 后一页*/if (position >= -1 && position <= 1) {view.setTranslationX(view.getWidth() * -position);float yPosition = position * view.getHeight();view.setTranslationY(yPosition);}}
}

上部分代码,实现了界面由原来的横向平移到纵向平移的过程。其思路是这样的,我画了一个草图(凑合看,毕竟连幼儿园都没毕业,画画功底~~)

这张图描述了我们手机的屏幕,我们知道ViewPager,默认是把三个界面横向着排一起的,现在我们将其改为纵向的。如果手指向下滑动,也就是第一个界面(绿色的),它将会进入到我们的屏幕,然而当前页(红色的)将退出屏幕,这是一套完整的流程,手指向上滑动,则方向相反。

            view.setTranslationX(view.getWidth() * -position);float yPosition = position * view.getHeight();view.setTranslationY(yPosition);

    这是对ViewPager中所有子View的x,y坐标进行平移使它能够排成纵向一排。代码不难,就是对x,y坐标的平移处理。例如:绿色的:它的position为-1,对y坐标而言,平移它的view高度。也就是-height,对x坐标而言,则平移它的width*-position,那它就跑到红色的头上了,现在我们往下滑动手指,它就进入屏幕了。

  • 如何使用

与普通ViewPager使用方式一样,我们在xml文件中直接引入我们的自定义ViewPager就好了。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.example.x.mycustomviews.my_viewpager.vertical.VerticalViewPagerandroid:id="@+id/vp_vertical"android:layout_width="match_parent"android:layout_height="match_parent" />
</RelativeLayout>

ViewPager 实现纵向翻页切换、仿抖音视频垂直切换相关推荐

  1. Android 使用ViewPager2+ExoPlayer+VideoCache 实现仿抖音视频翻页播放

    1. 实现效果 效果图中,视频没有铺满 是因为使用了ExoPlayer的RESIZE_MODE_FIT模式, 虽然使用RESIZE_MODE_FILL模式可以填充整个父布局,但是本Demo中使用的视频 ...

  2. Android仿抖音上下滑动切换视频

    Android仿抖音上下滑动切换视频 https://www.jianshu.com/p/af9c0e46725d  自从各大直播平台可以滑动切换直播间后,公司就出了一大波需求,还要配合各种收费,各种 ...

  3. html5仿抖音全屏播放,仿抖音视频全屏播放滑动切换

    1 前言 随着移动技术的快速迭代,数据流量费用的快速下降,视频.直播正成为全民的媒体盛宴,我司必然也不会缺席此次盛宴,这里讲述的是通过h5实现仿抖音视频全屏播放&滑动切换的效果,供我司直播鉴定 ...

  4. html5仿抖音切换效果,仿抖音视频滑动效果

    更新记录 1.6.2(2020-06-04) 优化css3动画效果 1.6.1(2020-05-23) 1.修复串音 2.新增进度条 3.新增弹幕 查看更多 scroll-video uniapp仿抖 ...

  5. vue仿抖音视频列表(兼容微信内置X5浏览器)

    vue 仿抖音视频列表(兼容微信内置X5浏览器)https://blog.csdn.net/superKM/article/details/87603255制作 仿抖音视频列表遇到很多坑,特别是安卓微 ...

  6. 仿抖音视频自动播放html,vue 仿抖音视频列表(兼容微信内置X5浏览器)

    制作 仿抖音视频列表遇到很多坑,特别是安卓微信内置浏览器,让人脑壳疼,核心代码不多 便于理解 组件用到了vant 中的swiper滑动组件 h5 原生 video 属性 webkit-playsinl ...

  7. 微信小程序仿抖音视频

    微信小程序仿抖音视频 使用轮播图实现视频滑动效果. wxml 部分 <view class="video-contain"><!-- 自定义头部 -->&l ...

  8. 抖音只能上下滑动吗_抖音只能上下滑动吗_实现仿抖音视频滑动的两个方案

    0.效果图 1.先来看一下需求 1. 项目中的视频播放,要求实现抖音那种竖直方向一次滑动一页的效果.滑动要流畅不卡顿,并且手动触摸滑动超过1/2的时候松开可以滑动下一页,没有超过1/2返回原页. 2. ...

  9. Android 仿抖音视频播放列表和评论列表

    Android 汇集CSDN.GitHub等最实用的良心之作-KING Android最实用的各种技能点的网址链接(每天都会更新,希望大家用的上) Android 仿抖音系列之视频播放列表和评论列表 ...

最新文章

  1. 由于目标机器积极拒绝,无法联接。microsoft sql server,错误:10061
  2. 不做在线电商,或许才是永辉超市的未来
  3. python百分号和斜杠_Python中正反斜杠(‘/’和‘\’)的意义与用法
  4. 第四次测试--面向对象
  5. IOS考试题3字体变大变小
  6. boa linux arm修改网卡,嵌入式linux架设boa webserver
  7. 移动硬盘无法访问,要怎么找到文件
  8. 中美线径对照表_常用线规号码与线径对照表下一页
  9. 摄影常用词:光圈、快门、曝光、底片、ISO、焦距、景深
  10. 2017年第十七届迪培思广州国际广告展会刊(参展商名录)
  11. 在腾讯,有多少技术Leader在写代码?
  12. HTML如何制作音乐网站(如何搭建个人音乐网页)
  13. js数组操作(push,pop,shift,unshift,slice,splice,concat,sort)
  14. eyoumailserver邮箱服务器与foxmail 邮箱客户端的使用和安装
  15. amap 高德 地图打点 地图描点 描点居中 清除打点
  16. Table ‘数据库.数据库表‘ doesn‘t exist
  17. xpath提取当当网数学书前十页信息
  18. LabVIEW模拟卡拉OK唱机的灯光显示效果
  19. 使用halo和hexo+github两种方式免费搭建个人博客网站
  20. 聊天机器人,让你的营销变得更加简单

热门文章

  1. 用 JavaScript 实现三次贝塞尔动画库 - 前端组件化
  2. 基于三阶贝塞尔曲线的数据平滑算法
  3. 操作系统安装及初始化规范
  4. 2.4万字长文!Android代码、图片、布局、网络和电量优化
  5. 【剑指offer】 用两个栈实现队列 java实现
  6. 利用海面高度数据计算地转流的脚本
  7. 如何修改After Effects模板
  8. bzoj1711【Usaco2007 Open】Dingin 吃饭
  9. 【论文学习】Two-Stream Convolutional Networks for Action Recognition in Videos
  10. ㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣化学规律ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎...