欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

Android listview的滑动冲突解决方法

时间:2021-01-27 10:42:49|栏目:Android代码|点击:

Android listview的滑动冲突解决方法

在Android开发的过程中,有时候会遇到子控件和父控件都要滑动的情况,尤其是当子控件为listview的时候。就比如在一个ScrollView里有一个listview,这种情况较常见,就会出现这种滑动冲突的情况。这种情况也比较常见,有时候就是这样,没法,但是,了解事件分发的我们知道应该怎么处理这样的事情

有两点需要注意:

一般来说,view的onTouchEvent返回true,即消耗点击事件,viewgroup的onInterceptTouchEvent返回false,即不拦截点击事件,这一点从android源码中可以看出来。但是listview的父类AbsListView重写了onInterceptTouchEvent,返回了true,注意这里不是一定返回true,但是我觉得这一点可以先忽略。

onTouchEvent和onInterceptTouchEvent的调用顺序。点击事件从父控件向子控件传递,如果父控件不拦截,则交由子控件拦截,如果父控件拦截了,则交由父控件的onTouchEvent处理,如果最终处理点击事件的控件的onTouchEvent返回了false,则将会直接调用其父控件的onTouchEvent,如此向上类推

其实解决方法也很简单:重写父控件的onInterceptTouchEvent函数,在move的时候根据需要返回true,比如左右滑动返回true,其他情况均返回false。这样,当左右滑动的时候,由于onInterceptTouchEvent返回了true,父控件就能处理,其他情况,事件将传递到listview中,listview自身可以处理上下滑动。

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev)  
{ 
  Log.d(TAG, "onInterceptTouchEvent-slop:"+mTouchSlop); 
 
  final int action = ev.getAction(); 
  if ((action == MotionEvent.ACTION_MOVE) && (mTouchState != TOUCH_STATE_REST)) 
  { 
    return true; 
  } 
 
  final float x = ev.getX(); 
  final float y = ev.getY(); 
 
  switch (action) 
  { 
  case MotionEvent.ACTION_MOVE: 
    final int xDiff = (int)Math.abs(mLastMotionX-x); 
    if (xDiff>mTouchSlop) 
    { 
      mTouchState = TOUCH_STATE_SCROLLING; 
    } 
    break; 
 
  case MotionEvent.ACTION_DOWN: 
    mLastMotionX = x; 
    mLastMotionY = y; 
    mTouchState = mScroller.isFinished()? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING; 
    break; 
 
  case MotionEvent.ACTION_CANCEL: 
  case MotionEvent.ACTION_UP: 
    mTouchState = TOUCH_STATE_REST; 
    break; 
  } 
 
  return mTouchState != TOUCH_STATE_REST; 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

上一篇:详细讲解Android中使用LoaderManager加载数据的方法

栏    目:Android代码

下一篇:详解Android中weight的使用方法

本文标题:Android listview的滑动冲突解决方法

本文地址:http://www.codeinn.net/misctech/52393.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有