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 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题