区分customView和scroll view的触摸事件
Differentiate touch events between customView and scroll view
我在滚动视图中添加了一个customView 和一个customView。现在我想区分两个触摸事件。我的问题是当尝试滚动时,customView 也获取触摸事件,当我尝试更改 customView 时,滚动视图获取事件。
- 我们如何在滚动时停止 customView 触摸事件。
- 当customView需要事件时,我们如何停止滚动触摸事件。
提前致谢
你可以给child view设置touch listener,然后在onTouch()事件中,你可以屏蔽拦截父view的touch事件。
即
v.setOnTouchListener(new OnTouchListener() {
// Setting on Touch Listener for handling the touch inside ScrollView
@Override
public boolean onTouch(View v, MotionEvent event) {
// Disallow the touch request for parent scroll on touch of child view
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
关于第二个问题,我不确切知道你在用 customview 做什么,但也许你想改用点击事件,因为在 ontouch
中使用不同的逻辑对用户来说不是很友好和 onclick
因为它总是会意外启动。
boolean isScrolling = false;
myScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { @Override public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY)
isScrolling = scrollX != oldScrollX;
//for vertical scrolling
});
//then onTouchListener
if(!isScrolling){//Do operations on non scrolled state}
我在滚动视图中添加了一个customView 和一个customView。现在我想区分两个触摸事件。我的问题是当尝试滚动时,customView 也获取触摸事件,当我尝试更改 customView 时,滚动视图获取事件。
- 我们如何在滚动时停止 customView 触摸事件。
- 当customView需要事件时,我们如何停止滚动触摸事件。
提前致谢
你可以给child view设置touch listener,然后在onTouch()事件中,你可以屏蔽拦截父view的touch事件。
即
v.setOnTouchListener(new OnTouchListener() {
// Setting on Touch Listener for handling the touch inside ScrollView
@Override
public boolean onTouch(View v, MotionEvent event) {
// Disallow the touch request for parent scroll on touch of child view
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
关于第二个问题,我不确切知道你在用 customview 做什么,但也许你想改用点击事件,因为在 ontouch
中使用不同的逻辑对用户来说不是很友好和 onclick
因为它总是会意外启动。
boolean isScrolling = false;
myScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { @Override public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY)
isScrolling = scrollX != oldScrollX;
//for vertical scrolling
});
//then onTouchListener
if(!isScrolling){//Do operations on non scrolled state}