通过Custom 2d Scrollview父级捕获onTouch事件,对其进行处理并传递给子级



我正试图通过父级实现Catch-onTouch事件,处理它并传递给子级,但未能做到这一点。

完整二维滚动码的Gist是此处

我尝试过的:

覆盖方法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" />

目前无法进行详细检查,但这是一个突出的问题:

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

这里返回false不一定是true;你的一个孩子的观点可能已经处理了这个事件,需要让别人知道。。。我认为你需要做一些更像这样的事情:

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

最新更新