Android关于SwipeLayout嵌套 ViewPager+Fragment,滑动冲突问题完美解决,模仿QQ右滑个人信息卡页面
2019-06-13 22:29
1961 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36617198/article/details/91898305
Android关于SwipeLayout嵌套 ViewPager+Fragment,滑动冲突问题解决
前言
我是刚入门的android小白,最近在写一个小Demo的时候遇到了一个问题,如标题所言,百度了很久都没能找到想要的答案,也许我应该早点自己试着看看。
我的SwipeLayout里面也是正常的BottomView 和SurfaceView ,其中SurfaceView里面是ViewPager+Fragment 下面还有个TabLayout。
问题如下:
我的BottomView处于这个界面的底部,就是划开表层的view就能看见,可是我正常滑动的时候就会出现这个蓝色的边缘线,也就不能正常的划开表面的View,发生这种情况的概率也不低,严重影响体验。开始讲怎么解决。
首先添加viewpager页面变动监听,不多赘述。。。
下面代码中的viewPager就是我的ViewPager的实例化
swipeLayout就是SwipeLayout的实例化。。。
float nextOne = 0; //记录viewpager滑动后将会跳转的下一个碎片 float position = 0; //记录滑动时,当前的位置 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { if(i == 0) { //当我向右边滑动时,滑动到下一个碎片时偏移值i1会增大, //处于第一个碎片时,向右滑动此时偏移值i1不会增大,依然为0 //这个时候就可以判断出用户,下一步是想要滑动到下一个碎片,还是底层的V iew if (i1 > 0) { nextOne = 1; //下一个碎片 } else { nextOne = 0; //底层View } } moveLine(i, v, 150); } @Override public void onPageSelected(int i) { position = i; //每次页面变动时,当前viewpager的位置 changeTab(i); if (i == 0) { swipeLayout.setSwipeEnabled(true); } else { swipeLayout.setSwipeEnabled(false); } } @Override public void onPageScrollStateChanged(int i) { } });
解释都写在注释了,不多
接下来写viewPager的触摸事件监听。。。
viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, final MotionEvent event) { //当前页面是第一个碎片,将要打开的下一个页面是底层View if(nextOne == 0 && position == 0){ //这里开个线程去执行ontouchevent,避免抖动 new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { swipeLayout.onTouchEvent(event); } }); } }).start(); return true; //消化掉这次触摸事件 } return false; } });
下面放我的布局看个大概就是了
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" tools:showIn="@layout/activity_main"> <com.daimajia.swipe.SwipeLayout android:id="@+id/swipe_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!--BottomView 底层--> <LinearLayout android:id="@+id/information_card" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="left" android:visibility="visible"> <include layout="@layout/information"></include> </LinearLayout> <!--SurfaceView 表层--> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!--这里是ViewPager --> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_marginBottom="10dp" android:layout_above="@id/line"> </android.support.v4.view.ViewPager> <!--这里是Tablayout--> <ImageView android:id="@+id/line" android:layout_width="150dp" android:layout_height="5dp" android:layout_above="@id/Tab" android:layout_marginBottom="10dp" android:background="@android:color/holo_green_light" /> <LinearLayout android:id="@+id/Tab" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true" android:visibility="visible"> <include layout="@layout/tab_layout"></include> </LinearLayout> </RelativeLayout> </LinearLayout> </com.daimajia.swipe.SwipeLayout> </LinearLayout>
大问题算是解决了,但是还存在小问题,在切换到底层的时候,切换到一半然后手指按住不动,界面会有抖动,不过我觉得可以优化,后面做出来就更新。。。加油各位!
2019.06.14
昨天写好了博客今天就来加,已经解决了切换抖动的问题,开了个线程去执行swipeLayout的onTouchEvent就可以避免抖动了,这样减少了耗时操作(我是这样认为的),代码已更新。
ViewPager-onPageScrolled参数困惑
SwipeLayout 的使用
转载请注明出处https://blog.csdn.net/qq_36617198/article/details/91898305
相关文章推荐
- Android_fragment加载webView与ViewPager所带来的滑动冲突问题解决方法
- Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题
- android 布局 使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题
- 完美解决Android里面scrollview嵌套及listview嵌套viewpager的滑动冲突问题的简单方法
- MPAndroidChart在ViewPager+Fragment滑动冲突解决
- android 中解决ViewPager和SlidingPaneLayout的滑动事件冲突问题
- 完美解决View Pager和SlidingPaneLayout的滑动冲突问题
- Android:关于Viewpager中的Fragment 滑动时保存状态的问题
- Android 用Json解析请求图片写的一个ViewPager广告轮播 , 带滑动小圆点 ,完美解决了三张图片引起的滑动问题
- 【Android】完美解决SwipeRefreshLayout中嵌套ViewPager时滑动冲突的方法
- android 教您完美解决viewpager嵌套viewpager冲突问题
- 完美解决DrawerLayout全屏滑动及嵌套viewpager滑动冲突问题
- 解决Fragment +Viewpager滑动页面重复加载的问题
- android 教您完美解决viewpager嵌套viewpager冲突问题
- 完美解决ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题
- 关于viewpager中嵌套的fragment中的listview的横向滑动的滑动冲突的问题。
- Android解决ViewPager嵌套Fragment,Fragment嵌套ViewPager滑动冲突
- ViewPager禁止滑动,设置页片间距,设置当前显示的页面,缓存个数,以及解决嵌套ViewPager左右滑动冲突问题
- Android ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题解决方案
- fragment加载webView与ViewPager所带来的滑动冲突问题解决方法