Android viewpagerネストwebviewのスライド衝突解決


問題の説明
需要はこのようにして、viewpagerの内部には複数の異なるページがネストされており、スライド切り替えは異なるhtml 5ページを表示し、考えは良いが、いくつかの問題に直面している.htmlページにもviewpagerのような横スライド可能なコントロールがあります.htmlのスライド効果のあるコントロールをスライドしようとすると、外部viewpager全体がスライドしていることに気づき、別のページに直接切り替えました.ハハハ、素晴らしいですね.
解決策
解決方法は3つあります.その中の1つ目の方法は最もベンゼンで、2つ目はまあまあですが、少し面倒です.3つ目の方法は最も完璧です.今のところ問題は見つかりません.待ちきれないのは直接3つ目の方法を見ることができます.
方法1
画面を左中右の3つの領域に分けて、中間部分をスライドさせると外層viewpagerのスライドが禁止され、具体的な操作はwebviewのontoucheventで、タッチ領域を判断することによってrequestDisallowInterceptTouchEvent(true)が呼び出され、trueの場合、タッチイベントはwebviewにブロックされ、親コントロールに伝わらず、viewpagerは自然にスライドしないので、もちろんそうします.ユーザーが使うと卵が痛くなり、今では全面的なスクリーンジェスチャー操作がある携帯電話が多く、ページをめくってもうっかりアプリケーションを終了してしまうのは面白いのではないでしょうか.この方法は極めてお勧めではありません.ページをめくらずにtabをクリックしたほうがいいです.
方法2
2つ目の方法はjsとandroidの間で通信し、jsはhtmlページのスライド可能なコントロールの位置を取得し、android、アンドロイド、またはwebviewのontoucheventイベントでタッチの位置を判断し、スライドコントロールにタッチするとr e q u s t D i a l l owInterceptTouchEvent(true)でイベントをブロックし、viewpagerはスライドできなくなります.効果は前の方法より少しよく聞こえますが、少なくともviewpagerのエッジをクリックしないでスライドすることができますが、実際の使用ではページがロードされたばかりの1 s以内に座標位置が戻っていない可能性があります.このとき、htmlのviewpagerをスライドすると画面全体がスライドし、作業量も少し大きくなります.結局この方法を採用しなかったのは幸いだ.
方法3
上の2つの方法は簡単ですが、前にネットで検索した方法の大部分はその2つの方法で、3つ目の方法は詳しく紹介します.
  • まず私たちの目的を明確にし、htmlのスライド可能なコントロールをスライドするときに外層viewpagerをスクロールさせないことを望んでいるので、すべての方法の目的はviewpagerのスライド無効化タイミング
  • を明確にすることにある.
  • では、最初からviewpagerのスライドを無効にして、viewpagerのスライドを有効にするタイミングを考えてもいいですか?
  • はここから成功まで遠くないと思います.そうすれば、webviewをクリックすると、外層viewpagerのスライドが直接無効になります.htmlのスライド可能なコントロールをスライドすると、スライドすることができます.外層viewpagerも切り替えられません.無効になっているからです.
  • もしこれがこのように書かれていたら、どうやって他のページに切り替えますか?つまり、いつ、外層viewpagerのスライドをどのように有効にしますか?もちろん内層webviewが動かない時だ~
  • 間違いなく、webviewです.protected void onOverScrolledという方法があります.画面の内容をスクロールしてコンテンツの境界に達すると、さらにスクロールすると発光効果があります.これらの効果はどのように実現されますか.そうですね.この方法と関係があります.webviewを書き換えるこの方法は、中でviewpagerのスクロールを有効にすればいいのですが、webviewが動かないときは、webviewがスクロールできるときです.そう言えばもっとはっきりしているのではないでしょうか.

  • はい、コードをつけます.
    これはコードです
    コードには小さな問題があり、issueで提案され修復されています.