【安卓高级】ViewPager视差动画效果
在安卓开发中,是否遇见过一些很酷的视差动画效果,当ViewPager滑动下一页的时候,页面内的各种元素也能跟随滑动做位移效果,整体看起来非常有活力。
关键的PageTransformer
PageTransformer的用途这里就不展开了,相信做Android开发的都经常使用它实现ViewPager的各种切换效果。
public void transformPage(@NonNull View view, float position)
关键点就是PageTransformer的函数,这里详细讲解一下他们两个参数:
view:是应用变换的View,可以对View或子View进行动画,例如从第一页滑动到第二页,会将第一页的View和第二页的View分别传入,即调用了两次。
position:View的当前位置,其位置信息是一个范围值: -1 --- 0 --- 1,-1是前一个View的位置,0是当前View的位置,1是后一个View的位置。
手指往右滑动:当前View从0到1变化,前一个View从-1到0变化。
手指往左滑动:当前View从0到-1变化,后一个View从1到0变化。
子View进行位移操作
核心:根据上面的positon,在应用变换的时候,在view查找出子View,对子View应用各种操作(例如偏移)等等,就能显示出跟随手指滑动的视差效果。
大概的代码例子如下:
uiGuidePager.setPageTransformer(true, new ViewPager.PageTransformer() { @Override public void transformPage(@NonNull View view, float v) { View uitestOne = view.findViewById(R.id.uitestOne); View uiOneLogo = view.findViewById(R.id.uiOneLogo); View uiOneDevice = view.findViewById(R.id.uiOneDevice); View uiOneTip = view.findViewById(R.id.uiOneTip2); View uiOneTouch = view.findViewById(R.id.uiOneTouch); if (uitestOne != null) { Log.e(">>>>", v + ""); uitestOne.setTranslationX(400 * v); uiOneLogo.setTranslationX(50 * v); uiOneDevice.setTranslationX(50 * v); uiOneTip.setTranslationX(200 * v); uiOneTouch.setTranslationX(200 * v); } } });
(扩展) 画廊视觉效果
在实现视差动画效果的同时,也可以叠加画廊视觉效果,用ViewPager实现画廊视觉效果,加上视差动画效果,滑动的时候每一页内部的元素会跟随滑动进行动画位移,视觉就更加炫。
画廊视觉效果的步骤实现是比较简单:
1)在XML中设置设置ViewPager的宽度小于父布局,留出空间展示两边页面的内容。
2)设置ViewPager的clipChildren为false,让ViewPager两边页面的内容绘制显示出来。
3)代码中设置viewPager.setPageMargin(10),设置相邻页面的间距。
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.anbang.family.surface.impl.guide.GuideActivity"> <android.support.v4.view.ViewPager android:clipChildren="false" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:id="@+id/uiGuidePager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </android.support.constraint.ConstraintLayout>
viewPager.setPageMargin(30);
(相关)ViewPager2
在ViewPager2上使用视差动画效果的原理是一样的,ViewPager2一样提供了完全一致的PageTransformer,所以切换到ViewPager2时可以直接复用动画的代码,迁移零成本。
【安卓高级】ViewPager视差动画效果的更多相关文章
- Swift - 用UIScrollView实现视差动画效果
Swift - 用UIScrollView实现视差动画效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // MoreInfoVi ...
- Android ViewPager+属性动画 实现炫酷视差动画效果
ViewPager有一个setPageTransform()方法可以实现很多酷炫的动画效果 先来个仿QQ的侧滑面板效果 vp.setPageTransformer(true, new PageTran ...
- ViewPager切换动画效果改动
比方我们点击向右button,希望左边的view移动过来,有个平移效果,可是用系统默认的ViewPager切换的时候,会一闪而过. 这是为什么呢? 由于viewpager外面事实上有个scrollvi ...
- Android:ViewPager 切换动画效果
ViewPager 可以设置不同页面切换效果,通过方法 setPageTransformer(boolean reverseDrawingOrder, PageTransformer transfor ...
- Android开发之ViewPager实现多页面切换及动画效果(仿Android的Launcher效果)
Android开发中经常会有引导页或者切换页面等效果,本文采用ViewPager结合动画效果来实现仿Launcher以及页面切换的效果.源码地址在文章最后给出下载. 效果图如下: 1.Vi ...
- 【笔记】WPF实现ViewPager引导界面效果及问题汇总
最近在开发项目的首次使用引导界面时,遇到了问题,引导界面类似于安卓手机ViewPager那样的效果,希望通过左右滑动手指来实现切换不同页面,其间伴随动画. 实现思路: 1.界面布局:新建一个UserC ...
- 高级UI-自定义动画框架
有的时候会需要做一些自定义的动画效果,在会反复用到的动画效果可以考虑做成动画框架,方便使用,做成框架的话就需要考虑很多的问题,最典型的问题就是属性和方法必须要是可配置的,这里就来聊一聊自定义动画框架的 ...
- Android项目实战(四):ViewPager切换动画(3.0版本以上有效果)
学习内容来自“慕课网” 一般APP进去之后都会有几张图片来导航,这里就学习怎么在这张图片切换的时候添加切换动画效果 先看布局文件 activity_main.layout <?xml versi ...
- 转:Android ViewPager多页面滑动切换以及动画效果
一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式, 白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了 ...
随机推荐
- Resin 与 Tomcat 服务器对比
Resin 与 Tomcat对比(个人总结) 图片来源Tomcat PK Resin 上图对比发现Tomcat对于Resin来说,有诸多优点,但是Resin也有很多优点. 比方说: 速度比较 re ...
- Java中XML的四种解析方式(二)
三.JDOM解析 特征: 1.仅使用具体类,而不使用接口. 2.API大量使用了Collections类. import org.jdom2.Attribute; import org.jdom2.D ...
- Spyder中报错: Check failed: PyBfloat16_Type.tp_base != nullptr
报错问题: 问题1:tensorflow/python/lib/core/bfloat16.cc:675] Check failed: PyBfloat16_Type.tp_base != nullp ...
- WUSTOJ 1327: Lucky Numbers(Java)
题目链接:1327: Lucky Numbers Description A lucky number is made by the following rules: Given a positive ...
- linux命令行删除N天前的数据的命令
命令: find . -mtime +N -type f -name "*.log.*" -exec rm -f {} \; 简单解释: find .查询 ; -mtime 规 ...
- window服务器查看管理员列表
快捷键win+R 输入cmd并进入 输入指令net localgroup administrators
- C# 小数各种操作
Math.Ceiling();//向上取整 //举一反三 Math.Floor();//向下取整 Math.Round();//四舍六入五取偶
- centos7上使用git clone出现问题
centos 7 git clone时出现不支持协议版本的问题 unable to access 'https://github.com/baloonwj/TeamTalk.git/': Peer ...
- pdm文件打开方式
转自:https://blog.csdn.net/qq_36855191/article/details/79299216 pdm打开网站:http://www.dmanywhere.cn/
- 2019最新Web前端经典面试试题(含答案)
1,阐述清楚浮动的几种方式(常见问题)(1)父级div定义 height原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题. 优点:简单.代码少.容易掌握 缺点:只适合高 ...