mynamecsl
mynamecsl
采纳率58%
2018-06-25 04:10 阅读 1.2k

viewpager自定义动画如何判断左滑右滑

160

主体是Viewpager和TabLayout的联动。现在改动Viewpager的滑动动画效果。

效果:页面不再有滑动的效果,滑走的页面直接慢慢消失,滑进来的页面直接慢慢显示。

重写transformPage方法如下,加Animation是因为点击Tab的时候跳转太快,没有缓慢消失缓慢出现的效果。

现在从第一页到第五页切换效果正常。但是反过来从第五页到第一页,每次切换,都会先闪现一下要显示的页面,然后才跑慢慢显示的动画。

试过把条件position < 0改成position < 0||position > 0,但是这样正反切换都闪屏了,实在不知道怎么写向右滑动的条件了。

有没有大神帮忙看一下为什么。

 public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();    //得到view宽

        if (flag) {
            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left. 出了左边屏幕
                view.setAlpha(0);

            } else if (position <= 1) { // [-1,1]
                if (position < 0) {
                    //消失的页面
                    Animation animation = AnimationUtils.loadAnimation(context, R.anim.alpha_out);
                    view.startAnimation(animation);
                    view.setTranslationX(-pageWidth * position);  //阻止消失页面的滑动

                } else {
                    //出现的页面
                    Animation animation = AnimationUtils.loadAnimation(context, R.anim.alpha_in);
                    view.startAnimation(animation);
                    view.setTranslationX(pageWidth);        //直接设置出现的页面到底
                    view.setTranslationX(-pageWidth * position);  //阻止出现页面的滑动

                }
                // Fade the page relative to its size.
                float alphaFactor = Math.max(MIN_ALPHA, 1 - Math.abs(position));
                //透明度改变Log
                view.setAlpha(alphaFactor);
            } else { // (1,+Infinity]
                // This page is way off-screen to the right.    出了右边屏幕
                view.setAlpha(0);
            }

        }
    }

联动添加动画的代码
mViewPager = (ViewPager) findViewById(R.id.view);
TabPagerAdapter adapter = new TabPagerAdapter(getApplicationContext(),mTitleArray,mList);
ngGuidePageTransformer = new NGGuidePageTransformer();
ngGuidePageTransformer.setCurrentItem(MyCollection.this,0,mList);
mViewPager.setPageTransformer(true,ngGuidePageTransformer);
TranslationInterface tempfrag;
mViewPager.setAdapter(adapter);

    mTabLayout = (TabLayout) findViewById(R.id.tab);
    mTabLayout.setupWithViewPager(mViewPager);

alpha_out.xml
<?xml version="1.0" encoding="utf-8"?>
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="1000"
android:fillBefore="true">

alpha_in.xml
<?xml version="1.0" encoding="utf-8"?>
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="1000"
android:fillBefore="true">

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • renjiazhuo123 丿灬序曲 2018-06-25 07:09

    有些没看懂,一般判断左滑或者右滑是设置OnTouchListener,按下的时候获取到按下X坐标,滑动后松开的再次X坐标,松开坐标减去按下坐标,通过正负来判断左滑或者右滑

    点赞 评论 复制链接分享
  • maogedadada maogedadada 2018-06-26 01:21
  • qq_22937945 下页lxl 2018-06-26 02:49

    通过viewpager的滑动监听,用参数position进行比较,同时当判断完这个要把比较的positon覆盖。

    点赞 评论 复制链接分享

相关推荐