2016-06-24 2 views
0

Я использую библиотеку photoview chris banes для обработки всех событий масштабирования для моей галереи.Обнаруживать каждый раз, когда изображение увеличено или уменьшено

Я хочу определить, было ли изображение увеличено или было уменьшено пользователем без переопределения всех этих двойных нажатий, а также методов сенсорного события. Есть ли эффективный способ достижения этого?

ответ

0

Чтобы ответить на мой собственный вопрос: -

я нашел гораздо лучший способ реализации обнаружения масштабирования, которая работает для щепотку зумом, а также двойное нажатие (любое событие масштабирования, без необходимости переопределить каждый метод) .Found его нигде в Интернете, чтобы обнаружить зум event.If есть гораздо более эффективный способ, пожалуйста, дайте мне знать :)

(Также я использую Крис BaneS PhotoView библиотеки для обработки зуммирования.)

Так, чтобы обнаружить событие масштабирования, получить прямоугольник текущего фотоизображения и когда произойдет событие масштабирования, OnMatrixChangeListener вызывается и там вы сравниваете прямоугольники, чтобы видеть.

(Теперь просто использовать этот прослушиватель для обработки события масштабирования не получится, потому что прослушиватель вызывается, каждый раз, когда вы меняете изображение, (если вы используете его в галерее), он также вызывается, когда ориентация экрана меняется, а также когда на экран выводятся простые приближения без масштабирования.)

Также, когда меняется ориентация экрана, иногда фотообъем возвращает прямоугольник 0, поэтому вы должны проверить это также, вот мой код: - if (savedInstanceState.getBoolean (Constants.ZOOM)) { photoViewAttacher = новый 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.
См: IPhotoView
Здесь можно увидеть слушатель:

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

Надеется, что это помогает.

+0

есть куча слушателей и куча способов для увеличения, и они получают уведомление, даже если пользователь не намерен увеличить –

+1

Глядя на [в пределах шкалы реализации] (https: // GitHub. com/chrisbanes/PhotoView/blob/master/library/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java # L499) пользователь уведомляется только о том, когда установлен слушатель. И не изменяет состояние представления. –

+0

Даже при прокрутке изображений метод вызывается и вызывает непреднамеренное поведение. –

Смежные вопросы