我在ListView
内的onTouchListener
上有一个RealitveLayout
和一个ListView
。它工作得很好,我得到了触摸坐标,只要我不开始滚动,因为ListView
从我的OnTouchEvent
方法“窃取”触摸事件,并调用ACTION_CANCEL
。如果我在requestDisallowInterceptTouchEvent(true)
上设置ListView
,我的OnTouchEvent
方法效果很好,它可以很好地跟踪移动,但ListView
不会滚动。我怎样才能实现ListView
滚动和我的方法获得事件?
以下是相关代码:(从touch()
上的适配器调用RelativeLayout
方法,并在此活动的ListView
方法中初始化onCreate()
< / p>
@Override
public void touch(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
FriendlyTouch friendlyTouch = new FriendlyTouch(true, x, y, key);
mMessagesDatabaseReference2.setValue(friendlyTouch);
break;
case MotionEvent.ACTION_MOVE:
Log.i("TAG", "moving: (" + x + ", " + y + ")");
FriendlyTouch friendlyTouch1 = new FriendlyTouch(true, x, y, key);
mMessagesDatabaseReference2.setValue(friendlyTouch1);
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
mMessagesDatabaseReference2.child("TouchDown").setValue(false);
break;
case MotionEvent.ACTION_SCROLL: //this doesnt seem to do anything`
Log.i(TAG, "scrolled");
FriendlyTouch friendlyTouch2 = new FriendlyTouch(true, x, y, key);
mMessagesDatabaseReference2.setValue(friendlyTouch2);
break;
case MotionEvent.ACTION_CANCEL:
Log.i(TAG, "cancelled");
mMessagesDatabaseReference2.child("TouchDown").setValue(false);
break;
}
}
答案 0 :(得分:0)
方法&#34; boolean onTouchEvent(MotionEvent e)&#34;从你的ontouchlistener返回false? False应该允许其他侦听器也获得touchEvent。如果返回true,则不会调用其他touchlisteners。
答案 1 :(得分:0)
我猜你也可以通过扩展const source = map.getSource('mySource');
source.pause();
source.play();
来构建CustomListView
。
然后你应该覆盖ListView
,这个方法负责取消你的onTouch事件,而不是执行滚动(至少在我的情况下)。
onInterceptTouchEvent(MotionEvent ev)
如果你真的需要同时工作,我想你唯一的机会是覆盖ListView的@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(youWantScrollingToWork()){
return super.onInterceptTouchEvent(ev);
}else{
//don`t scroll, instead continue your own touchEvent
return false;
}
}
,然后让它返回false,这样你的监听器仍然会被调用,但这看起来很讨厌。