Android-AnimViewPager自定义切换效果
来源:互联网 发布:数组大小可以任意改变 编辑:程序博客网 时间:2024/05/01 18:07
先看看效果:
之前看过github上的JazzyViewPager,通过重写ViewPager的 onPageScrolled方法,来实现自定义页面切换效果。然而,google其实为已经开发者提供了实现自定义切换效
果的接口,我们可以在developer.android.com上看到关于ViewPager.PageTransfromer的介绍
android.support.v4.view.ViewPager.PageTransformer
Class Overview
A PageTransformer is invoked whenever a visible/attached page is scrolled. This offers an opportunity for the application to apply a custom transformation to the page views using animation properties.
As property animation is only supported as of Android 3.0 and forward, setting a PageTransformer on a ViewPager on earlier platform versions will be ignored.
要展示不同于默认滑屏效果的动画,我们需要实现ViewPager.PageTransformer接口,然后把它补充到ViewPager里。在transformPage()的实现中,基于当前屏幕显示的页面的position(position 由transformPage()方法的参数给出)决定哪些页面需要被动画转换,这样我们就能创建自己的动画。position参数表示特定页面相对于屏幕中的页面的位置。它的值在用户滑动页面过程中动态变化。当某一页面填充屏幕,它的值为0。当页面刚向屏幕右侧方向被拖走,它的值为1。如果用户在页面1和页面2间滑动到一半,那么页面1的position为-0.5并且页面2的position为 0.5。
1、这里,我们可以理解为,position即为View左上角的横坐标 2、值得注意的是,ViewPager的页面有默认的滑屏动画,因此如果我们需要页面保持不动,则需要自己写位移来抵
developer.android.com已经给出了两种动画切换效果,通过学习,我自己添加了一种动画效果,类中定义了三种切换效果:
private ANIM mANIM = ANIM.ZoomOut; public void setANIM(ANIM anim){ this.mANIM = anim; } public enum ANIM{ ZoomOut,Depth,Rotate }
然后,接下来就是动画效果的实现,这里展示developer.android.com上展示的ZoomOut切换效果的实现:
private void AnimZoomOut(View view, float position){ int pageWidth = view.getWidth(); int pageHeight = view.getHeight(); if (position < -1) { //页面离开左边视图区 view.setAlpha(0); } else if (position <= 1) { // [-1,1] float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); float vertMargin = pageHeight * (1 - scaleFactor) / 2; float horzMargin = pageWidth * (1 - scaleFactor) / 2; if (position < 0) { //页面处于Y轴左侧 view.setTranslationX(horzMargin - vertMargin / 2); } else { //页面处于Y轴右侧 view.setTranslationX(-horzMargin + vertMargin / 2); } // Scale the page down (between MIN_SCALE and 1) view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); // Fade the page relative to its size. view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA)); } else { //页面离开右边视图区 view.setAlpha(0); } }
最后,这个自定义的AnimViewPager用法和普通的ViewPager是一样的,我们也可以自己定义自己想要的切换动画,哈哈,顿时感觉自己的ViewPager高大上了,最后的最后,还是自定义AnimViewPager的链接:AnimViewPager
private ANIM mANIM = ANIM.ZoomOut; public void setANIM(ANIM anim){ this.mANIM = anim; } public enum ANIM{ ZoomOut,Depth,Rotate }
private void AnimZoomOut(View view, float position){ int pageWidth = view.getWidth(); int pageHeight = view.getHeight(); if (position < -1) { //页面离开左边视图区 view.setAlpha(0); } else if (position <= 1) { // [-1,1] float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); float vertMargin = pageHeight * (1 - scaleFactor) / 2; float horzMargin = pageWidth * (1 - scaleFactor) / 2; if (position < 0) { //页面处于Y轴左侧 view.setTranslationX(horzMargin - vertMargin / 2); } else { //页面处于Y轴右侧 view.setTranslationX(-horzMargin + vertMargin / 2); } // Scale the page down (between MIN_SCALE and 1) view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); // Fade the page relative to its size. view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA)); } else { //页面离开右边视图区 view.setAlpha(0); } }
1 0
- Android-AnimViewPager自定义切换效果
- 自定义Activity切换效果
- UIVIewController自定义切换效果
- UIVIewController自定义切换效果
- UIVIewController自定义切换效果
- ViewPager自定义切换效果
- UIVIewController自定义切换效果
- [移动] 谈谈自定义Android界面切换效果库的使用
- 谈谈自定义Android界面切换效果库的使用
- 谈谈自定义Android界面切换效果库的使用
- [移动] 谈谈自定义Android界面切换效果库的使用
- 谈谈自定义Android界面切换效果库…
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- C# 类的继承
- hdu 1019 Least Common Multiple
- hdu2296||UVALive 4223 Trucking (二分+spfa)
- LeetCode Algorithms #235 <Lowest Common Ancestor of a Binary Search Tree>
- Android中SQLite应用详解
- Android-AnimViewPager自定义切换效果
- Android OkHttp完全解析 是时候来了解OkHttp了
- Hadoop:The Definitive Guide 4th Edition
- 《老罗Android》学习之SQLite
- MongoDB_条件操作符
- 多线程总结上
- 设计模式之代理模式
- solr 为单独的core导入jar
- leetcode之Serialize and Deserialize Binary Tree