双色球2013022,惊世侠传,教室门qvod
实现viewpager的滑动翻页效果可以使用viewpager的setpagetransformer方法,如下:
import android.content.context; import android.support.v4.view.viewpager; import android.util.attributeset; import android.view.view; public class readviewpager extends viewpager { public readviewpager(context context) { super(context); } public readviewpager(context context, attributeset attrs) { super(context, attrs); setanima(); } public void setanima() { setpagetransformer(true, new pagetransformer() { private static final float min_scale = 0.75f; @override public void transformpage(view view, float position) { int pagewidth = view.getwidth(); int pageheight =view.getheight(); if (position < -1) { // [-infinity,-1) // this page is way off-screen to the left. view.setalpha(0); } else if (position <= 0) { // [-1,0] // use the default slide transition when moving to the left page view.setalpha(1); view.settranslationx(0); view.setscalex(1); view.setscaley(1); } else if (position <= 1) { // (0,1] // fade the page out. view.setalpha(1 - position); // // // counteract the default slide transition // view.setalpha(1); view.settranslationx(pagewidth * -position); // // // scale the page down (between min_scale and 1) float scalefactor = min_scale + (1 - min_scale) * (1 - math.abs(position)); view.setscalex(scalefactor); view.setscaley(scalefactor); } else { // (1,+infinity] // this page is way off-screen to the right. view.setalpha(0); } } }); } }
核心代码是android官方demo,以上实现的是翻页效果是:上面一页被滑出界面时,下面一页慢慢显现,透明度慢慢加大,并且大小由小慢慢变大。
不过有一个奇怪的现象,当我做一个答题界面时,刚刚开始我采用viewpager与view结合实现无限循环切换,并且采用上面的动画效果,可是每当我滑动到最后一张,也就是要开始新的一轮循环的时候,被滑出去的一页也会出现慢慢变透明的情况,而我用viewpager结合fragment实现无限循环切换的是就不会出现这种效果
如果想要实现仿造驾考宝典的翻页效果,只要把核心方法改为以下代码便可以了
setpagetransformer(true, new pagetransformer() { private static final float min_scale = 0.75f; @override public void transformpage(view view, float position) { int pagewidth = view.getwidth(); int pageheight =view.getheight(); if (position < -1) { // [-infinity,-1) // this page is way off-screen to the left. view.setalpha(0); } else if (position <= 0) { // [-1,0] // use the default slide transition when moving to the left page view.setalpha(1); view.settranslationx(0); view.setscalex(1); view.setscaley(1); } else if (position <= 1) { // (0,1] // fade the page out. // view.setalpha(1 - position); // // // counteract the default slide transition view.setalpha(1); view.settranslationx(pagewidth * -position); // // // scale the page down (between min_scale and 1) // float scalefactor = min_scale // + (1 - min_scale) * (1 - math.abs(position)); // view.setscalex(scalefactor); // view.setscaley(scalefactor); } else { // (1,+infinity] // this page is way off-screen to the right. view.setalpha(0); } } });
下面我们来讲讲position参数:
position的可能性的值有:
[-infinity,-1) 已经看不到了
(1,+infinity] 已经看不到了
[-1,1]
重点看[-1,1]这个区间 , 其他两个的view都已经看不到了~~
假设现在viewpager在a页现在滑出b页,则:
a页的position变化就是( 0, -1]
b页的position变化就是[ 1 , 0 ]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio 解决logcat无过滤工具栏的操作
Android Studio 恢复小窗口停靠模式(Docked Mode)
Android studio保存logcat日志到本地的操作
Android Studio快捷键生成TAG、Log.x日志输出介绍
网友评论