mynamecsl 2018-06-25 04:10 采纳率: 58%
浏览 1300
已结题

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

主体是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条回答 默认 最新

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)