1

这是布局 -

 <ScrollView>

<RelativeLayout>

    <Layout1>
    </Layout1>

    <Layout2>
    </Layout2>

    <Layout3>
    </Layout3>

    <Layout4>
    </Layout4>

    <Layout5>
    </Layout5>

    <Layout6>
    </Layout6>
</RelativeLayout>
</ScrollView>

我已经在Activity中实现了onGestureListener。我必须检测滑动操作——在各个布局(布局 1 到布局 6)上向上滑动和向下滑动。由于布局位于滚动视图中,因此未检测到滑动动作(OnFling )。如何检测滚动视图的子元素的 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);
        }
    });

重写方法 -

@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;
}
4

2 回答 2

1

尝试扩展 ScrollView 类并覆盖这些 onDown 和 onFling。像这样的东西

@Override
public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
    float arg3) {
    super.onFling(arg0,arg1,arg2,arg3);   
    return false;
}

看看这是否有效。

要点是从消耗手势事件的滚动视图方法返回false。谷歌更多。我不确定。

于 2013-02-18T11:12:18.977 回答
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);
        }
    }

}
于 2013-03-29T05:33:22.230 回答