Android ViewPagerとサブコントロールのクリックイベントの競合解決策


ViewPagerには多くのものが置かれていますが、本稿では解決策を提供します.
サブスペースはOnClickListenerではなく、OnTouchListenerを使用します.
class OnClick implements View.OnTouchListener {

        private String title;
      
        public ZhiDeSouOnClick(String title) {
            this.title = title;       
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action) {
                case MotionEvent.ACTION_DOWN:  
                    title_all = title;
                    break;
            }
            return false;
        }
    }
たとえば、これはサブコントロールのTouchListenerイベントです.「title」パラメータを渡します.グローバルな「title_all」パラメータを定義し、Touchイベントでtitleを送信します.この中のTouchListenerの戻り値は必ずfalseで、falseを返すと、私たちが画面に指を触れたイベントはViewPagerのサブコントロールにブロックされず、下に伝達され続けます.ただし、falseが返されると、サブコントロールは次のようになります.
MotionEvent.ACTION_DOWN
この応答イベントは、他の応答イベントが捉えられないのも正常です.
その後、ViewPagerのTouchイベントで処理する.
viewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                switch (action) {
                    case MotionEvent.ACTION_DOWN:
                        startX = (int) event.getX();
                        startY = (int) event.getY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        break;
                    case MotionEvent.ACTION_UP:
                        endX = (int) event.getX();
                        endY = (int) event.getY();
                        if (Math.abs(endX - startX) < 50 && Math.abs(endY - startY) < 50) {
                            try {
                                Toast.makeText(getApplicationContext(), "           , ViewPager      "+title_all, Toast.LENGTH_SHORT).show();
                            } catch (Exception e) {
                            }
                        }
                        break;
                }
                return false;
            }
        });
このように処理すると、サブスペースのTouchイベントでfalseを返したため、ViewPagerのスライドはブロックされません.ここでサブスペースは必ずTouchを使い、Clickイベントを使うとブロックされ、ViewPagerがスライドできなくなります.サブコントロールは、実現したいメソッドのパラメータを発信し(これにより、ViewPagerのうちどのサブコントロールかを判断)、ViewPagerのTouchイベントで処理する.ACTION_UPで計算を行い、ユーザの指の移動が50未満の場合にメソッドをトリガーする.
これにより、ViewPagerとサブコントロールのクリックイベントの競合が解決されます.
私は最初にこの問題に出会ったとき、どのように衝突を解決しようとしたが、最後にはこのような問題があった.それから私は考えを変えて、2つの事件の衝突を解決するよりも、2つの事件を1つの事件に変えて、このように間もなく衝突していませんか、それからいくつかのパラメータを配合して間もなく得られます.上のコードですね~