【安卓高级】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滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式, 白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了 ...
随机推荐
- noip2019集训测试赛(二十一)Problem B: 红蓝树
noip2019集训测试赛(二十一)Problem B: 红蓝树 Description 有一棵N个点,顶点标号为1到N的树.N−1条边中的第i条边连接顶点ai和bi.每条边在初始时被染成蓝色.高桥君 ...
- git基本使用及分支切换命令
git init 生成本地仓库 git status 查看本地文件状态,未提交的文件显示红色 git add . (点表示提交所有文件到暂存区,也可指定部分文件到暂存区,填写指定文件名加路径即可) ...
- PAT(B) 1068 万绿丛中一点红(C)
题目链接:1068 万绿丛中一点红 (20 point(s)) 参考博客:1068. 万绿丛中一点红(20) i逆天耗子丶 题目描述 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定 ...
- QQ、微信 唯一登陆设计
唯一登陆设计指一个账号可以在多个不同的客户端进行登陆,例如PC.Android.IOS等.每一个客户端就会生成一个对应的tokan,相当于生成三个token分别对应不同的客户端. 但是同一个客户端同时 ...
- java-websocket客户端 断线重连 注入Service问题
java版客户端: 使用开源项目java-websocket, github地址: https://github.com/TooTallNate/Java-WebSocket github上有很多示例 ...
- springboot_2
1. 配置文件简介 spring boot使用一个全局配置文件:application.properties或者application.yml,放置在src/main/resources目录下或者类路 ...
- springboot接收date类型参数
springboot接收日期类型参数,实现自动转换. 1. 当请求类型为json,date类型字段为 json 字段时,可以使用如下两种方法 1.1. 当前参数加两个注解(有些文章说接收只需要加 @D ...
- 如何导出robotframework的工程
不知道是不是只有我一个小白,自己折腾了很久,也百度了很久,不知道怎么导出哇.现在来扫扫盲罗.我拿自己的项目举例:找到我的RF工程目录可以看到下面有3个项目,直接拷贝你想要的项目就ok啦,是不是so e ...
- python+django早教课程
虚拟环境安装项目中需要安装许多插件,为不影响系统的环境,可以为项目新建一个虚拟环境,所有的早教课程安装包在该虚拟环境中独有,以防影响其他项目.1. 安装虚拟环境:pip install virtual ...
- PimaIndiansdiabetes-数据预处理实验(一)
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10859517.html 链接:https:// ...