Как я могу переопределить ограничения логического PhotoViewAttacher onFling(MotionEvent, MotionEvent, float, float)?

PhotoViewAttacher"s boolean onFling(MotionEvent, MotionEvent, float, float) мешает моему OnSingleFlingListener"s onFling метод от вызова, если текущий масштаб не является минимальным.

Я реализовал OnSingleFlingListener от com.github.chrisbanes.photoview, Тем не менее, так как onFling метод виден только в пакете, PhotoViewAttacher"s onFling Метод вызывается первым. PhotoViewAttacher.onFling мешает моему onFling метод от вызова, когда scale > DEFAULT_MIN_SCALE, Мне нужно, чтобы мой позвонил, если scale > getMediumScale(), (scale == getMediumScale() когда ширина моего изображения соответствует ширине окна.) Как я могу обойти это? Нужно ли делать свою собственную копию всего PhotoView упаковать и изменить OnSingleFlingListener.onFling быть публичным?

Мой код:

public class BasicViewActivity extends AppCompatActivity implements DownloadCallback, OnSingleFlingListener {
@Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        . . . 
        return true;
    }

OnSingleFlingListener:

package com.github.chrisbanes.photoview;
public interface OnSingleFlingListener {
    boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
}

PhotoViewAttacher:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    if (mSingleFlingListener != null) {
        if (getScale() > DEFAULT_MIN_SCALE) {
            return false;
        }
        . . . 
        return mSingleFlingListener.onFling(e1, e2, velocityX, velocityY);
    }
    return false;
}

Я хочу мое onFling называется когда getScale() <= getMediumScale(), Вместо этого мой onFling метод вызывается только когда getScale() == DEFAULT_MIN_SCALE,

0 ответов

Я решил обойти это.

  1. Я клонировал пакет PhotoView.
  2. Я скопировал его источник в свой собственный пакет.
  3. Я изменил одну строку, упомянутую выше (и добавил дробь, чтобы предотвратить ошибку с плавающей запятой):

    if(getScale() > getMediumScale() + .01f) {
        return false;
    }
    
Другие вопросы по тегам