博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 布局 使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题
阅读量:5771 次
发布时间:2019-06-18

本文共 2316 字,大约阅读时间需要 7 分钟。

使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题。

 

我的问题原型:

 

     这个问题,我相信遇到的人会比较少,我是在 一个 viewPager 中,其中 一个 fragment 中实现了长按滑动图片的功能,而发现它们两者的

onTouchEvent事件冲突。

 

尝试过的解决方法:

    1-----

     遇到这问题,首先是百度,百度到的方法有,自定义 viewPager,在里面重写    onTouchEvent  和 onInterceptTouchEvent,具体代码是下面,这种方法,我尝试

后发现,只能在第一次加载 viewPager的 页面达到 阻断的效果,我这里详细说下,在MainActivity 页面里面,我们初始化了 viewPager,然后我们要在 第二个页面的

fragment 中实现阻断,这时候,你可能会尝试 在 fragment 中new 一个 MainActivity 的对象,然后想方设法 获取它 里面的 viewPager,或者是 引入与 MainActivity

绑定好了的 xml文件,再 在 fragment 中 findViewById() 来获取次 viewPager。 然后使用 自定义 viewPager 里面的 函数。

     很不幸,我上述谈到的方法,我都试过了, all failed。

 

1 package com.LGH.weixin; 2  3 /** 4  * Created by Administrator on 2015/5/30. 5  */ 6 import android.content.Context; 7 import android.support.v4.view.ViewPager; 8 import android.util.AttributeSet; 9 import android.util.Log;10 import android.view.MotionEvent;11 12 13 public class myViewPager extends ViewPager {14 15     private boolean enabled = true; // 默认是 可以侧滑的16 17 18     public myViewPager(Context context, AttributeSet attrs) {19         super(context, attrs);20     }21 22     public void setStopViewPagerSlip(boolean enabled){23         this.enabled = enabled;24         Log.i("--------------------",""+this.enabled);25     }26     //触摸没有反应就可以了27     @Override28     public boolean onTouchEvent(MotionEvent event) {29         if (this.enabled) {30             return super.onTouchEvent(event);31         }32         return false;33     }34 35 36     @Override37     public boolean onInterceptTouchEvent(MotionEvent event) {38         if (this.enabled) {39             return super.onInterceptTouchEvent(event);40         }41         return false;42     }43 }

 

      2-----

       第二种方法是我最后真正解决了的。刚开始的时候,使用有误,导致失败。

       方法: view.requestDisallowInterceptTouchEvent(true); //传入参数是 true 即可

       我第一次使用它失败的原因是:

            在 我的 fragment中,由于 viewPager 它本是就是一个 view,所以 我使用 该方法的时候,就直接 

            viewPager .requestDisallowInterceptTouchEvent(true); 结果是失败的。  在子 view 中正确使用方法是 下面 ↓

 

    解决方法:

    view.requestDisallowInterceptTouchEvent(true);中使用的 view 要求是你当前 fragment 引入的xml 返回的 view,而且 改为:

    view.getParent().requestDisallowInterceptTouchEvent(true);

    此时方能真正解决!  下面 引入些必要的 代码。

     

1 View main = inflater.inflate(R.layout.apart_center,container,false);
1 main.getParent().requestDisallowInterceptTouchEvent(true);

 

如果您认为这篇文章还不错或者有所收获,您可以通过扫描一下下面的支付宝二维码 打赏我一杯咖啡【物质支持】,也可以点击右下角的【推荐】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力

img_12e3f54d4d0f70f0eb14f20548e3d781.png

转载地址:http://lxsux.baihongyu.com/

你可能感兴趣的文章
两个以上gameobject同时调用同一函数时候transform代码中改变但是实际效果并不改变的诡异问题...
查看>>
类和对象
查看>>
网页链接qq
查看>>
java----spring框架
查看>>
框架流程
查看>>
Dot NET 内存泄漏
查看>>
c#关于时间TimeHelper类的总结
查看>>
Web APi入门之移除XML格式(一)
查看>>
SDK:用GetWindowRect GetClientRect 获得控件在客户区的RECT
查看>>
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes)
查看>>
UITextField
查看>>
css-进度条
查看>>
Redis配置文件详解
查看>>
数据链路层(1)
查看>>
Tracing App Engine Programs
查看>>
sql触发器知识
查看>>
AngularJS(7)-表格
查看>>
配置IIS Express 7.5以允许外部访问
查看>>
Python内置函数(9)——callable
查看>>
经典台词
查看>>