通过自定义2d Scrollview父级捕获onTouch事件,处理它并传递给子级

时间:2014-10-14 06:45:06

标签: android android-layout android-view ontouchevent android-scrollview

我试图实施 Catch onTouch event by parent, handle it and pass to children 但未能做到这一点。

完整的2d滚动码的要点是here

我的尝试:

重写方法 dispatchTouchEvent ,并将MotionEvent发送给GestureDetector

     @Override
     public boolean dispatchTouchEvent (MotionEvent ev) {

    // return super.dispatchTouchEvent(ev);

     boolean result = super.dispatchTouchEvent(ev);
     if (gestureDetector.onTouchEvent(ev)) {
            return result;
       } 
       //If not scrolling vertically (more y than x), don't hijack the event.
        else {
            return false;
       }

}

活动:

   setContentView(R.layout.activity_fullscreen);

    final View contentView = findViewById(R.id.fullscreen_content);

    android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
    ctx = this;

   ShapeDrawableView     animView = new ShapeDrawableView(this, fm, ctx);//customview



    ((ViewGroup) contentView).addView(animView);

布局:

<view
   class="com.example.astream.TwoDScrollView" 
   android:id="@+id/fullscreen_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:gravity="center" />

1 个答案:

答案 0 :(得分:2)

目前无法详细检查,但这是一个问题:

//If not scrolling vertically (more y than x), don't hijack the event.
else {
    return false;
}

返回false在这里不一定是真的;你的一个孩子的意见可能实际上已经处理了这个事件,需要让别人知道......我认为你需要做更多这样的事情:

@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
    gestureDetector.onTouchEvent(ev);

    return super.dispatchTouchEvent(ev);
}