我在ExpandableListVIEw的组视图(节标题)中有一个VIEwPager.不出所料,VIEwPager的滚动有时会变得不连贯,这很可能是因为ExpandableListVIEw试图拦截触摸事件.作为一种解决方案,我试图阻止ExpandableListVIEw拦截触摸事件(如果该触摸事件用于VIEwPager).所以,到目前为止,这就是我所做的.
private voID fixVIEwPager(VIEwPager vp) { vp.setontouchListener(new VIEwPager.OntouchListener() { @OverrIDe public boolean ontouch(VIEw v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // disallow ScrollVIEw to intercept touch events. Logger.log("disabling event stealing"); v.getParent().requestdisallowIntercepttouchEvent(true); break; case MotionEvent.ACTION_UP: // Allow ScrollVIEw to intercept touch events. Logger.log("Enabling event stealing"); v.getParent().requestdisallowIntercepttouchEvent(false); break; } // Handle ListVIEw touch events. v.ontouchEvent(event); return true; } }); }
但是,触摸侦听器永远不会获得ACTION_DOWN事件.它似乎只获得ACTION_UP事件.我该怎么解决我的问题?谢谢!
解决方法:
在发布问题后不久,我找到了答案https://stackoverflow.com/a/9770373/1036017.基于此,我将代码更改为以下代码.现在,一旦在VIEwPager中开始水平滚动,VIEwPager就可以防止ExpandableListVIEw窃取触摸事件.
private voID fixVIEwPager(VIEwPager vp) { vp.setontouchListener(new VIEwPager.OntouchListener() { @OverrIDe public boolean ontouch(VIEw vIEw, MotionEvent motionEvent) { vIEw.getParent().requestdisallowIntercepttouchEvent(true); switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_UP: Logger.log("disabling event stealing."); vIEw.getParent().requestdisallowIntercepttouchEvent(false); break; } return false; } }); }
总结 以上是内存溢出为你收集整理的android-如何阻止ExpandableListView窃取儿童触摸事件?全部内容,希望文章能够帮你解决android-如何阻止ExpandableListView窃取儿童触摸事件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)