2016-06-24 11 views
0

私のギャラリーのすべてのズームイベントを処理するために、クリスベインのフォトビューライブラリを使用しています。画像がズームインまたはズームアウトされるたびに検出

画像がズームインされているか、ズームインされているかどうかを検出するには、これらのダブルタップとタッチイベントメソッドをすべてオーバーライドしないでください。これを実現する効率的な方法はありますか?

答えて

0

自分の質問に答えるために: -

私は(各メソッドをオーバーライドすることなく、任意のズームイベント、)ズームピンチズームのために働くの検出だけでなく、ダブルタップを実装するためのより良い方法を見つけ、それを.Foundどこにもズームを検出するために、ウェブevent.Ifはるかに効率的な方法があるので、私に知らせていないしてください:)

(また、私が使用しているクリスは、ズームを処理するためてPhotoViewライブラリをbanes。)

ので、検出しますズームイベント、現在のフォトビューの矩形を取得し、ズームイベントが発生したときにOnMatrixChangeListenerが呼び出され、そこに見るために四角形を比較します。

(このリスナーを使用すると、画像を変更するたびに(ギャラリーで使用している場合)、リスナーが呼び出されるため、ズームイベントは機能しません。

また、画面の向きが変わると、フォトビューが0の矩形を返すことがあるため、その点をチェックする必要があります同様に、ここに私のコードがあります: - if(savedInstanceState.getBoolean(Constants.ZOOM)){ photoViewAttacher = new PhotoViewAttacher(backgroundImage);

 mWindowRect = new RectF(photoViewAttacher.getDisplayRect()); 
     photoViewAttacher.setOnMatrixChangeListener(new PhotoViewAttacher.OnMatrixChangedListener() { 
      @Override 
      public void onMatrixChanged(RectF rect) { 
       //need to differentiate between screen orientation 
       if (mWindowRect.left == 0 && mWindowRect.top == 0 && mWindowRect.right == 0 && mWindowRect.bottom == 0) { 
        mWindowRect = new RectF(rect); 
       } 

       if (Math.abs(mWindowRect.left - rect.left) < 2 && Math.abs(mWindowRect.top - rect.top) < 2 && Math.abs(mWindowRect.right - rect.right) < 2 && Math.abs(mWindowRect.bottom - rect.bottom) < 2) { 
        viewPager.setLocked(false); 
        thumbnailsContainer.startAnimation(appear); 
        thumbnailsContainer.setClickable(true); 
       } else { 
        viewPager.setLocked(true); 
        thumbnailsContainer.startAnimation(disappear); 
        thumbnailsContainer.setClickable(false); 
       } 
       Log.i("ZOOM", "default rect: " + mWindowRect); 
       Log.i("ZOOM", "zoom rect: " + rect); 
      } 
     }); 
0

PhotoViewの特定のイベントが発生したときに、通知を受けることができるリスナーの束を見ることができます。

void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener); 
void setOnScaleChangeListener(PhotoViewAttacher.OnScaleChangeListener onScaleChangeListener); 
void setOnSingleFlingListener(PhotoViewAttacher.OnSingleFlingListener onSingleFlingListener); 

・ホープ、このことができます:私はリスナーを見ることができます。ここ IPhotoView

を参照してください。

+0

がリスナーの束と、ズームインする方法の束があり、それらは、ユーザーが[onScale実装](HTTPSを見る –

+1

にズームインすることを意図していない場合でも、通知を受ける:// githubの。 ImageView/PhotoView/PhotoView/blob/master/library/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java#L499)、リスナーが設定されている場合にのみユーザーに通知されます。ビューの状態は変更しません。 –

+0

イメージをスクロールしていても、メソッドが呼び出され、意図しない動作が発生します。 –

関連する問題