zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    T-SQL 数据库数据的高级查询
    数据库 T-sql 基础语句
    数据库的定义、关系型数据库的四种约束。。
    linux上使用crontab任务调度
    pip list 显示出以下错误: DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] se
    python报错:NameError: name 'converter' is not defined
    python3报错:TypeError: can't concat bytes to str
    Fiddler如何手机抓包
    数据分析----VBA的使用
    Excel进行数据分析
  • 原文地址:https://www.cnblogs.com/linguanh/p/4540099.html
Copyright © 2011-2022 走看看