7

私のプロジェクトでは、画面上のタッチを検出し、それに応じてアクションを実行するために onTouchEvent を使用し、スワイプアクションに viewPager を使用しました。問題は、タッチアクションが実行されているスワイプにあります。ここから解決策を見つけて解決しました。しかし、私の新しい問題は、 TouchEvent.Action_up が実行されると、タッチが無効になることです。コードは次のとおりです。

parent.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {

        switch(event.getAction())
        {
         case MotionEvent.ACTION_MOVE: 
                awesomePager.requestDisallowInterceptTouchEvent(true);
                break;
        case MotionEvent.ACTION_UP:
            awesomePager.requestDisallowInterceptTouchEvent(true);
             if(flag)
             {
               upperdock.setClickable(false);
                upperdock.bringToFront();
                tocparent.bringToFront();
                tocbottom.bringToFront();
                upperdock.setVisibility(RelativeLayout.VISIBLE);
                tocparent.setVisibility(LinearLayout.VISIBLE);
                tocbottom.setVisibility(LinearLayout.VISIBLE);
                flag=false;
             }
             else
             {

                parent.bringToFront();
                upperdock.setVisibility(RelativeLayout.INVISIBLE);
                tocparent.setVisibility(LinearLayout.INVISIBLE);
                tocbottom.setVisibility(LinearLayout.INVISIBLE);
                flag=true;
             }
             break;

        case MotionEvent.ACTION_CANCEL:
            awesomePager.requestDisallowInterceptTouchEvent(false);
             break;
        default:
            break;
        }

        return false;
    }
});

上記のコードで、false を返すと Action_up が実行されません。true を返すと、Action_cancel が実行されません。つまり、値渡しが問題です。

4

2 に答える 2

2

私はこれのために何かを変更します。

使用せず awesomePager.requestDisallowInterceptTouchEvent(false)、そのまま使用してreturn trueください。

アクティビティブール値の srollを定義します。

ViewPager.onPageScrolled でsroll = positionOffset != 0.0を設定し、 ViewPagerビューであるonTouchEventを オーバーライドします。

(event.getAction()==MotionEvent.ACTION_UP && !sroll)をチェックして、イベントがトリガーされるかどうかを判断できるようになりました

于 2012-07-05T16:49:19.710 に答える
1

私は同じ問題を抱えていました!私にとって、これは非常にうまく機能しました....

case MotionEvent.ACTION_MOVE: {
        getParent().requestDisallowInterceptTouchEvent(false);
        break;
    }

 case MotionEvent.ACTION_CANCEL:{
        getParent().requestDisallowInterceptTouchEvent(true);
        break;

}

case MotionEvent.ACTION_UP:{

 //delete  awesomePager.requestDisallowInterceptTouchEvent(true);
 //you don't need it here!
                 .
                 .
            do your stuff....
                 .

}

onTouch メソッド全体を false ではなく true として返します...

return true;
于 2014-10-01T11:50:00.677 に答える