2

Web ページなどのズーム可能なビューを含む ViewPager を作成したいと考えています。

私の問題は:

ユーザーが表示されたビューをズーム (スケーリング) すると、ViewPager は表示されたビューの左側または右側のページに移動するのではなく、私が定義したパン メソッドがそのビューで機能する必要があります。ビューページャーに requestDisallowOnTouchIntercept メソッドがあることは承知していますが、onTouch メソッドの代わりにどこでも機能していないようです。

親切にいくつかの有効な解決策を提供してください。

このリンクを回答として投稿しないでください

4

1 に答える 1

0

ズーム ビューをどのように実装したかを知らずに正確な答えを出すことはできませんが、ビューがズームインされているかどうかを追跡できると仮定すると、ViewPager に到達する前にタッチ イベントを選択的にキャンセルできます。次のようになります。

boolean isZoomedIn;

viewPager.setOnTouchListener(new OnTouchListener()
{
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        if (isZoomedIn)
        {
            // The view is zoomed in, so we want to handle this event 
            // before it gets to the ViewPager so the view can pan
            // around freely.
            return true;
        }
        else
        {
            // The view is zoomed out; let the ViewPager react normally.
            return false;
        }
    }
});

ズームインしたビューが左端または右端にあるかどうかを追跡し、ポインターの動きがそれぞれ左または右に移動している場合は、ViewPager のタッチ イベントを正常に完了できるようにすることで、そこからより洗練されたものにすることができます。次に、ユーザーが完全にズームアウトする必要なく、次のページにスワイプできるようにします。MotionEvent オブジェクトのさまざまなプロパティを使用して、タッチがどのように動いているかをすべて知ることができます。

また、event.getPointerCount() をチェックして、1 より大きい場合は True を返し、ズームの実行中に ViewPager が動き回らないようにすることもできます。

すべての変数を追跡して説明するのは少し複雑になりますが、それは比較的単純な数学であり、その結果は、ViewPager に無視させたいイベントに対して True を返し、反応させたいイベントに対して False を返すことになります。

于 2011-12-01T21:10:09.590 に答える