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

使用 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     @Override
28     public boolean onTouchEvent(MotionEvent event) {
29         if (this.enabled) {
30             return super.onTouchEvent(event);
31         }
32         return false;
33     }
34 
35 
36     @Override
37     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);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏KK的小酒馆

Adapter与ListView的简单应用(上)Android应用界面开发

所谓适配器,是一个在“用户界面”View和“数据模型”Model之间的"控制器"Controller

1132
来自专栏Android干货园

Retrofit--记使用Retrofit时遇到的一个坑

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/52...

911
来自专栏Android机器圈

Android数据绑定技术二,企业级开发

PS:上一篇文章写了Databinding的简单使用,写了一个绑定textview的示例,和绑定的一些用法,估计有的人会说,之前的写的好好的,为什么要数据绑定这...

3539
来自专栏向治洪

开源项目Universal Image Loader for Android

In the previous article, we’ve initialized the ImageLoader with configuration; ...

1825
来自专栏Android干货

安卓开发_数据存储技术_SharedPreferences类

2888
来自专栏CodingBlock

Android学习笔记(四)深入探讨Activity

  在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕。这个主界面一般由多个Fragment组成,并由一组次要Activity支持。要在屏幕之间切...

21210
来自专栏Vamei实验室

安卓第六夜 凡高的自画像

在上一讲中,我已经制作了一个简单的Android应用。项目的主要文件包括: MainActivity.java activity_main.xml 在这一讲,我...

2047
来自专栏GIS讲堂

安卓中的数据存取

在我们每天使用的手机设备中,无时无刻都在进行着数据的存和取。安卓作为一种手机操作系统,提供了如下方式的数据存取方式:Preference,File,Sqlite...

1082
来自专栏知识分享

android客服端+eps8266+单片机+路由器之远程控制系统

用android客服端+eps8266+单片机+路由器做了一个远程控制的系统,因为自己是在实验室里,所以把实验室的门,灯做成了远程控制的。 控制距离有多远---...

5706
来自专栏Android开发经验

事件分发主要过程

1212

扫码关注云+社区