这是布局 -
<ScrollView>
<RelativeLayout>
<Layout1>
</Layout1>
<Layout2>
</Layout2>
<Layout3>
</Layout3>
<Layout4>
</Layout4>
<Layout5>
</Layout5>
<Layout6>
</Layout6>
</RelativeLayout>
</ScrollView>
我已在活动中实施了 onGestureListener 。
我必须在各个布局(布局1到布局6 )上检测滑动操作 - 向上滑动并向下滑动。由于布局位于滚动视图中,因此未检测到滑动操作( OnFling )。
如何检测scrollview子元素的 onFling ?任何帮助都将受到高度赞赏。
编辑:添加一些代码 -
以下是活动 -
public class ServiceScreen extends Activity implements OnFocusChangeListener,
OnTouchListener, OnGestureListener ....
布局和监听器 -
RelativeLayout rlCarBrand;
....
rlCarBrand.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gestureScanner.onTouchEvent(event);
}
});
Overriden方法 -
@Override
public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
float arg3) {
// TODO Auto-generated method stub
Log.i("LogMessage", "On Fling");
return true;
}
@Override
public boolean onDown(MotionEvent arg0) {
// TODO Auto-generated method stub
return true;
}
答案 0 :(得分:1)
尝试扩展ScrollView类并覆盖这些onDown和onFling。 像这样的东西
@Override
public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
float arg3) {
super.onFling(arg0,arg1,arg2,arg3);
return false;
}
看看是否有效。
指向从正在使用手势事件的scrollview方法返回false。 谷歌更多。我不确定。
答案 1 :(得分:1)
创建一个扩展ScrollView的CustomScrollView类。
有了这个,我们可以改变Scrollview的滚动启用属性。
public class CustomScrollView extends ScrollView {
boolean bScrollable = false;
public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollingEnabled(boolean enabled) {
bScrollable = enabled;
}
public boolean isScrollable() {
return bScrollable;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// if we can scroll pass the event to the superclass
if (bScrollable) {
return super.onTouchEvent(ev);
}
// only continue to handle the touch event if scrolling enabled
return bScrollable; // mScrollable is always false at this point
default:
return super.onTouchEvent(ev);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Don't do anything with intercepted touch events if
// we are not scrollable
if (!bScrollable) {
return false;
} else {
return super.onInterceptTouchEvent(ev);
}
}
}