1

LinearLayout に webview と ViewPager があります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout 
    android:id="@+id/webview_wrapper"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="1" />


<android.support.v4.view.ViewPager 
    android:id="@+id/slide_page"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#696969" 
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:visibility="gone" />

私はwebviewとViewPagerの両方でOnTouchListenerを設定しています。ドラッグしているときに、webview でドラッグを開始し、MotionEvent を viewPager に渡そうとします。

私のコードは以下の通りです。

    WebView mainView  = tab.getWebView();
    mainView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent e) {
            Log.w("LOGTAG", "onTouch");                     
            switch (e.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_DOWN:
                    Log.w("LOGTAG", "ACTION_UP");
                    break;
                case MotionEvent.ACTION_MOVE:
                    Log.w("LOGTAG", "ACTION_MOVE");
                    Test(...);
                    mPager.dispatchTouchEvent(e);
                    break;
                case MotionEvent.ACTION_UP: 
                    Log.w("LOGTAG", "ACTION_UP");
                    break;
           }
           return false;
       }
   });

        private void Test(...) {
            FrameLayout wrapper =
                (FrameLayout) container.findViewById(R.id.webview_wrapper); 
            mPager = (ViewPager)container.findViewById(R.id.slide_page);
            ...
            wrapper.setVisibility(View.GONE);
            mPager.setVisibility(View.VISIBLE);        
            mPager.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent e) {
                    Log.w("LOGTAG", "mPager.onTouch");            

                    switch (e.getAction() & MotionEvent.ACTION_MASK) {

                        case MotionEvent.ACTION_DOWN:
                            Log.w("LOGTAG", "mPager.ACTION_DOWN");                      
                            break;
                        case MotionEvent.ACTION_MOVE:
                            Log.w("LOGTAG", "mPager.ACTION_MOVE");
                            break;
                        case MotionEvent.ACTION_UP: 
                            Log.w("LOGTAG", "mPager.ACTION_UP");
                            break;
                    }
                    return false;
                }
            });
        }

これが私のログです:

...

08-06 07:09:16.321: W/(26460): mPager.dispatchTouchEvent(e) = true

08-06 07:09:16.321: W/(26460): onTouch

08-06 07:09:16.321: W/(26460): ACTION_MOVE

08-06 07:09:16.321: W/(26460): mPager.onTouch

08-06 07:09:16.321: W/(26460): mPager.ACTION_MOVE

...

ViewPager onTouchListener は MotionEvent をうまく検出しましたが、viewpager は動きませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1