- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我确实扩展了 NestedScrollView 和 @Override 它的方法:onTouchEvent 和 onInterceptTouchEvent。问题是 super.onTouchEvent 从不调用 ACTION_DOWN(它由我的 onIntereceptTouchEvent 调用),因此 NestedScrollView 不会移动,我得到错误:
Invalid pointerId=-1 in onTouchEvent
当触发ACTION_DOWN时,在NestedScrollView的onTouchEvent方法中设置指针id。
mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
我不能自己设置,重写整个 onTouchEvent 方法似乎是一个痛苦的计划。可以在这里使用帮助。当我单击不监听触摸事件的 View 时,NestedScrollView 确实移动了(基本上这样我的 onInterecptTouchEvent 方法就不会被调用,ACTION_DOWN 在 NestedScrollView onTouchEvent 中处理)。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.i(LOGTAG, String.valueOf(ev.getAction()));
final int action = MotionEventCompat.getActionMasked(ev);
if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
mIsBeingDragged = false;
Log.i(LOGTAG, "is scrolling" + String.valueOf(mIsBeingDragged));
return false; // Do not intercept touch event, let the child handle it
}
switch (action) {
case MotionEvent.ACTION_DOWN: {
mStartY = ev.getY();
break;
}
case MotionEvent.ACTION_MOVE: {
if (mIsBeingDragged) {
return true;
}
final int yDiff = calculateDistanceY(ev);
Log.d(LOGTAG, "y difference: y");
if (yDiff > mTouchSlop) {
mIsBeingDragged = true;
return true;
}
break;
}
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
Log.i(LOGTAG, "onTouchEvent");
if (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP) {
mIsBeingDragged = false;
}
return super.onTouchEvent(ev);
}
最佳答案
下面是解决我的问题的代码,我不得不撒谎:
@Override
public boolean onTouchEvent(MotionEvent ev) {
Log.i(LOGTAG, "onTouchEvent");
if (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP) {
mIsBeingDragged = true;
}
if (mFirstOnTouchEvent) {
ev.setAction(MotionEvent.ACTION_DOWN);
ev.setLocation(mStartX, mStartY);
mFirstOnTouchEvent = false;
}
return super.onTouchEvent(ev);
}
并在 onInterceptTouchEvent 中触发 ACTION_DOWN 时将 mFirstOnTouchEvent 设置为 true:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (MotionEventCompat.getActionMasked(ev) == MotionEvent.ACTION_DOWN) {
mFirstOnTouchEvent = true
}
...
}
关于android - 嵌套 ScrollView 和 onInterceptTouchEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32699268/
我希望我的 ViewPager 仅在使用单指时滑动。所以我扩展了类并像这样实现了 onInterceptTouchEvent: @Override public boolean onIntercept
我有一个顶级 ViewGroup,我称之为 SliderView,我想在其中检测滑动。这主要是可行的,但仍然存在一个奇怪的故障。 SliderView 的本质是覆盖 onInterceptTouchE
在我的代码中,我使用预先确定的 XML 布局在我的 Activity 中生成 View 。我没有以编程方式创建它们,因此我找不到覆盖 onInterceptTouchEvent 方法的方法!有办法做到
抱歉,如果这含糊不清,但有人可以给我一个何时使用 onInterceptTouchEvent() 的例子吗? 我理解这个概念,在父 ViewGroup 中拦截 subview 触摸,但我为什么需要这样
我问这个相当复杂的问题,希望能从您那里得到一些想法。 事情是这样的:我创建了一个自定义 ListView 类,上面那个: public class FolderListView extends Lis
如何在 ListView 中实现自定义 onInterceptTouchEvent(),将滚动优先级分配给 ListView 的子级并尽快当他们滚动时,将其返回给 ListView ?我想优先考虑内部
我有一个覆盖了 onInterceptTouchEvent() 的自定义 ViewGroup。它收到 ACTION_DOWN 但从未收到 ACTION_MOVE。据我了解,除非它返回“true”,否则
为什么ViewGroup的onInterceptTouchEvent只得到ACTION_DOWN?根据文档,只要返回 false,它就应该接收所有事件类型。 http://developer.andr
我有一个带有 View 的 fragment ,其中包含一些可点击的元素(ToggleButtons 和一个 GridView)。 我在 View 上设置了一个 onTouchListener,我用它
我的布局看起来像这样: 我使用了一个包含 llMain 和 scroll 的 RelativeLayout。在 llMain 中,我有另外两个 LinearLayouts:ll1 和 ll2。每个 L
我希望能够在屏幕上的任意位置滑动来调用某个函数。但我在 Linear Layouts 中也有 Buttons,我希望能够点击它们。如果我在 Button 上滑动,我希望 onInterceptTouc
sdk 说: 3、For as long as you return false from this function, each following event (up to and includi
我确实扩展了 NestedScrollView 和 @Override 它的方法:onTouchEvent 和 onInterceptTouchEvent。问题是 super.onTouchEvent
我正在构建一个漫画/日本漫画应用程序,它有一个包含 viewpager 的 Activity 以显示每章中的图像。我希望 ViewPager 在用户在第一页/最后一页滑出边界时开始新的章节。为此,我通
Android中的onInterceptTouchEvent和dispatchTouchEvent有什么区别? 根据android开发者指南,这两种方法都可以用来拦截一个触摸事件(MotionEven
我一直在寻找,但我仍然没有找到任何东西。我试过了 View child = mirecycler.findChildViewUnder(e.getX(), and.getY()); 在我的例子中,它
日志从不记录ACTION_UP 或ACTION_MOVE(我从代码示例中删除以缩短) 这是我的代码的简化版本: public class ProfileBadgeView extends Linea
我有父 View v extends 线性布局。子项一是 LinearLayout,子项二是 ScrollView。 我想让 MyParent View 拦截垂直 MotionEvent.ACTION
我注意到该函数在 Action_down 之后没有中断,然后代码可以运行到 ACTION_MOVE,对吗? @Override public boolean onInterceptTouchEvent
我扩展了 ViewGroup 以创建自定义 View 。 在触摸事件中,当我的第二根手指触摸屏幕时,onInterceptTouchEvent 方法中未检测到 MotionEvent.ACTION_P
我是一名优秀的程序员,十分优秀!