3

画像のスライドに使用しましたが、ズーム オプションを使用して画像を表示する必要があります。画像はズームされますが、画像のズーム中にViewPagerページングが中断されます。onTouchEvent()OnInterceptTouchEvent()ViewPager

4

4 に答える 4

2

サブクラスViewPager化してオーバーライドしますcanScroll()。タッチ イベントが検出されたウィジェットが渡されますtrue。スクロール イベントをそのウィジェットに渡しfalseたい場合、またはViewPagerにそのスクロール量を使用させたい場合は、戻ることができます。あなたの場合、ズームしているときに独自のカスタムロジックを採用し、ズームしていないときにスーパークラスにチェーンするだけです。

于 2013-09-16T11:59:08.290 に答える
1

私も同じ問題に一度直面していましたが、これを解決するために次のことを行いました。カスタム ViewPager クラスを使用しました。

CustomViewPager .java

public class CustomViewPager extends ViewPager {

    private boolean isPagingEnabled;

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.isPagingEnabled = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (this.isPagingEnabled) {
            return super.onTouchEvent(event);
        }

        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (this.isPagingEnabled) {
            return super.onInterceptTouchEvent(event);
        }

        return false;
    }

    public void setPagingEnabled(boolean b) {
        this.isPagingEnabled = b;
    }
}

スクロールを無効にするには、次のスニペットを使用します。

CustomViewPager pager = (CustomViewPager) findViewById(R.id.pager);
pager.setPagingEnabled(false);

さらに情報が必要な場合は、尋ねることができます。それが役に立てば幸い。

于 2013-09-16T12:05:53.010 に答える
0

私は次の方法でこれを行いました。ユーザーがズームするとページングが無効になりますが、ズームされたイメージビューの端に到達すると、次/前の画像に適切にページングされます。

 @Override 
        public boolean onTouchEvent(MotionEvent ev) {
            if(handleTouch(ev)) {
                return super.onTouchEvent(ev);
            }
            else {
                return false;
            }

        }

        @Override 
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            if(handleTouch(ev) && !areCommentsOpen()) {
                return super.onInterceptTouchEvent(ev);
            }
            else {
                return false;
            }
        }

        private boolean handleTouch(MotionEvent ev) {
            if (prevX != -666 && ev.getAction() == MotionEvent.ACTION_MOVE) {
                if(ev.getX() <= prevX) {
                    isGoingLeft=false;
                }
                else {
                    isGoingLeft=true;
                }
            }
            else if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) {
                return true;
            }

            ZoomableImageView imageView = getImageView();
            if(imageView == null) {
                return true;
            }
            prevX=ev.getX();
            if(imageView.getZoomLevel() <= 1f) {
                return true;
            }

            else if(imageView.isBoundedLeft()) {
                if(isTransitioning) {
                    return true;
                }
                else if (isGoingLeft) {
                    isTransitioning = true;
                    return true;
                }
                else {
                    return false;
                }
            }

            else if (imageView.isBoundedRight()) {
                if(isTransitioning) {
                    return true;
                }
                else if (!isGoingLeft) {
                    isTransitioning = true;
                    return true;
                }
                else {
                    return false;
                }
            }

            else {
                isTransitioning = false;
                return false;
            }
        }

private ZoomableImageView getImageView() {
        for (int i = 0; i < getChildCount(); i++) {
            ZoomableImageView imageView = (ZoomableImageView) (getChildAt(i).findViewById(R.id.single_image_view));
            if(imageView.getPosition() == getCurrentItem()) {
                return imageView;
            }
        }
        return null;
    }

    public void setTransitioning(boolean trans) {
        this.isTransitioning = trans;
    }

    public void setGoingLeft(boolean left) {
        this.isGoingLeft = left;
    }
于 2013-09-16T12:06:40.157 に答える