私のギャラリーのすべてのズームイベントを処理するために、クリスベインのフォトビューライブラリを使用しています。画像がズームインまたはズームアウトされるたびに検出
画像がズームインされているか、ズームインされているかどうかを検出するには、これらのダブルタップとタッチイベントメソッドをすべてオーバーライドしないでください。これを実現する効率的な方法はありますか?
私のギャラリーのすべてのズームイベントを処理するために、クリスベインのフォトビューライブラリを使用しています。画像がズームインまたはズームアウトされるたびに検出
画像がズームインされているか、ズームインされているかどうかを検出するには、これらのダブルタップとタッチイベントメソッドをすべてオーバーライドしないでください。これを実現する効率的な方法はありますか?
自分の質問に答えるために: -
私は(各メソッドをオーバーライドすることなく、任意のズームイベント、)ズームピンチズームのために働くの検出だけでなく、ダブルタップを実装するためのより良い方法を見つけ、それを.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);
}
});
PhotoView
の特定のイベントが発生したときに、通知を受けることができるリスナーの束を見ることができます。
void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener);
void setOnScaleChangeListener(PhotoViewAttacher.OnScaleChangeListener onScaleChangeListener);
void setOnSingleFlingListener(PhotoViewAttacher.OnSingleFlingListener onSingleFlingListener);
・ホープ、このことができます:私はリスナーを見ることができます。ここ IPhotoView
:
を参照してください。
がリスナーの束と、ズームインする方法の束があり、それらは、ユーザーが[onScale実装](HTTPSを見る –
にズームインすることを意図していない場合でも、通知を受ける:// githubの。 ImageView/PhotoView/PhotoView/blob/master/library/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java#L499)、リスナーが設定されている場合にのみユーザーに通知されます。ビューの状態は変更しません。 –
イメージをスクロールしていても、メソッドが呼び出され、意図しない動作が発生します。 –